我有一个WPF用户控件有3个文本框,如Id,Name,Address。每个文本框都绑定到视图模型中的单独属性。我在VM中实现了IDataErrorInfo
以显示与每个属性相关的验证/错误消息。我在文本框中使用以下XAML。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="CustomTextBox" TargetType="TextBox">
<Setter Property="Height" Value="30"></Setter>
<Setter Property="FontSize" Value="15"></Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"></Setter>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel>
<AdornedElementPlaceholder>
<Border BorderBrush="Red" BorderThickness="2"></Border>
</AdornedElementPlaceholder>
<TextBlock Margin="3,0,0,0" Foreground="Red" Height="30" FontSize="15" FontWeight="Bold" Text="!" ToolTip="{Binding Path=AdornedElement.ToolTip,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Adorner}}"></TextBlock>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
问题:
假设我为Name输入了一个无效值,然后“不更正”,我转到Id文本框并在Id文本框中输入无效值。我原以为我会在Id文本框中看到“Id is invalid”消息,并且在Name文本框中看到“Name is invalid”消息。但它不会那样工作。我总是看到针对Name和Id文本框的第一条错误消息(“名称无效”)。
如何让它按预期工作?如何编写XAML以便它可以显示与每个文本框相关的错误消息?