对于具有无效值的所有文本框,将显示第一条错误消息

时间:2016-03-07 08:42:37

标签: wpf xaml mvvm data-binding idataerrorinfo

我有一个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以便它可以显示与每个文本框相关的错误消息?

0 个答案:

没有答案