Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 对绑定应用验证规则以仅在UI上显示验证结果_Wpf_Validation - Fatal编程技术网

Wpf 对绑定应用验证规则以仅在UI上显示验证结果

Wpf 对绑定应用验证规则以仅在UI上显示验证结果,wpf,validation,Wpf,Validation,我正在对文本框上的绑定应用验证规则。我从UI的角度正确地进行了验证,因为我在工具提示上看到了错误消息,并且也应用了错误模板(只是通常的红色边框) 然而,我必须显示的验证并不是超关键的,只需在UI上显示即可。绑定的问题是,一旦违反了验证规则,验证规则就会阻止对源对象进行更新。我希望源对象得到与文本框内容完全一致的更新 是否有一种方法可以在UI上显示错误模板而不影响绑定源 我的代码看起来像 <TextBox Name="texBox"> <TextBox.Text>

我正在对文本框上的绑定应用验证规则。我从UI的角度正确地进行了验证,因为我在工具提示上看到了错误消息,并且也应用了错误模板(只是通常的红色边框)

然而,我必须显示的验证并不是超关键的,只需在UI上显示即可。绑定的问题是,一旦违反了验证规则,验证规则就会阻止对源对象进行更新。我希望源对象得到与文本框内容完全一致的更新

是否有一种方法可以在UI上显示错误模板而不影响绑定源

我的代码看起来像

<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
}