我有两个像这样的文本框。
<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或任何简单的前景样式中更好吗?
答案 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>