比较WPF中的两个文本框值和显示错误

时间:2014-11-25 14:12:25

标签: wpf xaml mvvm

我有两个像这样的文本框。

   <TextBox Grid.Row="2" Grid.Column="1"Height="20"  Name="OldTextBox" Text="{Binding OldName}"  />

<TextBox Grid.Row="3" Grid.Column="1" Height="20"  Name="NewTextBox"  Text="{Binding NewName}"  />

如果OldName和NewName不同,我想以红色显示两个文本框值。

我关注MVVM。在ViewModel或任何简单的前景样式中更好吗?

1 个答案:

答案 0 :(得分:3)

要执行这种验证,您可以让您的视图模型类实现IDataErrorInfo接口。

class MyViewModel : IDataErrorInfo
{
    public string NewName { get; set; } // Notify property change here
    public string OldName { get; set; } // Notify property change here
    public string Error { get; private set; }
    public string this[string property]
    {
        get
        {
            switch (property)
            {
                case "OldName":
                case "NewName":
                    return OldName != NewName ? "Names are different" : null;
            }
            return null;
        }
    }
}

然后您需要在绑定中启用验证:

<TextBox Grid.Row="2" Grid.Column="1"Height="20"  Name="OldTextBox" Text="{Binding OldName, ValidatesOnDataErrors=True}"  />
<TextBox Grid.Row="3" Grid.Column="1" Height="20"  Name="NewTextBox"  Text="{Binding NewName, ValidatesOnDataErrors=True}"  />

如果需要,您可以通过设置文本框样式来更改背景颜色:

<Style TargetType="TextBox">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="Background" Value="Red"/>
        </Trigger>
    </Style.Triggers>
</Style>