Wpf 对绑定应用验证规则以仅在UI上显示验证结果
我正在对文本框上的绑定应用验证规则。我从UI的角度正确地进行了验证,因为我在工具提示上看到了错误消息,并且也应用了错误模板(只是通常的红色边框) 然而,我必须显示的验证并不是超关键的,只需在UI上显示即可。绑定的问题是,一旦违反了验证规则,验证规则就会阻止对源对象进行更新。我希望源对象得到与文本框内容完全一致的更新 是否有一种方法可以在UI上显示错误模板而不影响绑定源 我的代码看起来像Wpf 对绑定应用验证规则以仅在UI上显示验证结果,wpf,validation,Wpf,Validation,我正在对文本框上的绑定应用验证规则。我从UI的角度正确地进行了验证,因为我在工具提示上看到了错误消息,并且也应用了错误模板(只是通常的红色边框) 然而,我必须显示的验证并不是超关键的,只需在UI上显示即可。绑定的问题是,一旦违反了验证规则,验证规则就会阻止对源对象进行更新。我希望源对象得到与文本框内容完全一致的更新 是否有一种方法可以在UI上显示错误模板而不影响绑定源 我的代码看起来像 <TextBox Name="texBox"> <TextBox.Text>
<TextBox Name="texBox">
<TextBox.Text>
<Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<jas:RegexValidationRule
RegexText="^[A-Z]{3}\.[0-9]{3}$"
ErrorMessage="Invalid product code. (Examples: ABC.123 xyz.789)"
RegexOptions="IgnoreCase"
/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
发生这种情况的原因是,如果在绑定过程中的任何时候发生验证错误或其他类型的错误,则该过程将停止。我猜您必须将属性设置为UpdatedValue 示例:
<jas:RegexValidationRule ValidationStep="UpdatedValue"
RegexText="^[A-Z]{3}\.[0-9]{3}$"
ErrorMessage="Invalid product code. (Examples: ABC.123 xyz.789)"
RegexOptions="IgnoreCase"
/>
请查看中的“验证过程””部分。这将为您提供关于您要做什么的良好概述您可以尝试查看IDataErrorInfo。然后,您将在backing类(ViewModel)中获得验证,因此显示的文本框中的文本将与backing属性同步。在你的情况下,它看起来像这样
<TextBox Name="texBox">
<TextBox.Text>
<Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
</TextBox>
-我确实看过你的建议。这对理解绑定和验证规则有很大帮助。但是如果我听从你的建议,我就失去了UI验证。即使错误模板也无法应用。我没有使用DataErrorValidationRule。我的RegexValidationRule只是继承ValidationRule。这是否引起了人们的共鸣,认为可能有什么问题
public class YourClass : IDataErrorInfo
{
//...
#region IDataErrorInfo Members
public string Error
{
get { throw new NotImplementedException(); }
}
public string this[string columnName]
{
get
{
string result = null;
if (columnName == "ProductCode")
{
// Do your Regex Validation.
if (regexValidationFailed)
{
result = "Validation Error Text/Tooltip";
}
}
if (columnName == "SomeOtherProperty)
//...
return result;
}
}
#endregion
}