C# 如何创建WPF验证规则以确保两个文本字段具有相同的值?

C# 如何创建WPF验证规则以确保两个文本字段具有相同的值?,c#,.net,wpf,validation,xaml,C#,.net,Wpf,Validation,Xaml,如何创建验证规则以确保Value2与Value1具有相同的值?如果验证规则不是最好的方法,那么什么方法更好?我可以让TextChanged事件处理这个问题,但我想知道是否还有更优雅的东西 <TextBox Name="Value1TextBox"> <TextBox.Text> <BindingPath Path="Value1" UpdateSourceTrigger="PropertyChanged" /> </Tex

如何创建验证规则以确保Value2与Value1具有相同的值?如果验证规则不是最好的方法,那么什么方法更好?我可以让TextChanged事件处理这个问题,但我想知道是否还有更优雅的东西

<TextBox Name="Value1TextBox">
    <TextBox.Text>
        <BindingPath Path="Value1" UpdateSourceTrigger="PropertyChanged" />
    </TextBox.Text>
</TextBox>

<TextBox Name="Value2TextBox">
    <TextBox.Text>
        <BindingPath Path="Value2" UpdateSourceTrigger="PropertyChanged" />
    </TextBox.Text>
</TextBox>

看起来像是实现了
System.ComponentModel.IDataErrorInfo
接口并添加了
验证数据错误

<TextBox Name="Value2TextBox">    
    <TextBox.Text>        
        <BindingPath Path="Value2" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" />
    </TextBox.Text>
</TextBox>

如果需要组合多个值进行验证,那么验证规则就不太方便了。 如果您可以访问绑定的数据类型,那么在那里实现IDataErrorInfo会容易得多,并且您只需要使用ValidateOnDataError=True对绑定启用验证。 如果没有,您需要做一些工作来参数化ValidationRule: 或者使用此解决方法 或者这里描述的一些绑定代理(顺便说一句,非常好的助手)


对于其中一个,在验证另一个绑定时,您应该设法将一个绑定作为验证规则的参数。

对于我来说,将动态值传递给验证规则似乎很奇怪。这让我觉得我遗漏了一些东西,关键是验证规则是一个资源,而不是可视化树的一部分,所以你不能直接绑定任何东西。当然,也有一些简单的方法:如果您没有搜索完美的体系结构,您可以从文本框绑定到某个静态属性,然后从验证规则中访问该静态属性。您在哪里实现了
System.ComponentModel.IDataErrorInfo