The*_*aut 1 validation wpf binding
我的View上有一个TextBox,它有一个验证规则:
public class EmptyStringRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if(String.IsNullOrEmpty(value.ToString()))
return new ValidationResult(true,"String Cannot be empty");
return new ValidationResult(true,null);
}
}
Run Code Online (Sandbox Code Playgroud)
输入空字符串时.绑定属性未更新,文本框标记为红色.我需要更新Source但仍然将Marker保留在Textbox周围.(输入稍后由EF再次验证).
我怎么能这样做?
您可以通过将验证规则的ValidationStep属性设置为"UpdatedValue"来执行此操作:
<Binding.ValidationRules>
<c:EmptyStringRule ValidationStep="UpdatedValue"/>
</Binding.ValidationRules>
Run Code Online (Sandbox Code Playgroud)
请注意,这会导致BindingExpression传递给验证规则类而不是实际字段值,因此您必须相应地修改验证规则,以查询更新字段的值.(在我的示例中,绑定的字符串属性称为MyViewModel.MyStringProperty):
public class EmptyStringRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
var be = value as BindingExpression;
if (be != null)
{
var item = be.DataItem as MyViewModel;
if (item != null)
{
if (String.IsNullOrEmpty(item.MyStringProperty))
{
return new ValidationResult(false, "String Cannot be empty");
}
}
}
return new ValidationResult(true, null);
}
}
Run Code Online (Sandbox Code Playgroud)
通过此设置,当文本设置为空时,它应该实际上对MyStringProperty进行更新,但仍将进行验证.
| 归档时间: |
|
| 查看次数: |
1321 次 |
| 最近记录: |