如何验证两个不同TextBox中的值组合?

时间:2011-08-04 18:40:14

标签: c# wpf xaml

如何使用组合验证它们类似数据库中不应存在PropertyNumber和OwnerNumber组合。现在我正在使用IDataErrorInfo,但它一次只能验证一个值。

       <Label DockPanel.Dock="Top" Width="Auto" Height="16"/>

       <TextBox  Name="PropertyNumber" DockPanel.Dock="Top" Text="{Binding 
        UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Path=SelectedPropertyNumber, 
        ValidatesOnDataErrors=True}" Width="115"  Height="22" 
        HorizontalAlignment="Left" IsEnabled="{Binding 
        PropertyNumbersEnabled,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />

       <Label DockPanel.Dock="Top" Width="Auto" Height="16"/>

       <TextBox Name="OwnerNumber" Text="{Binding BindingGroupName=NGLDataFormGrp, 
        Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
        Path=OwnerNumber}" DockPanel.Dock="Top"  HorizontalAlignment="Left" 
        Width="115" Height="22"  IsEnabled="{Binding 
        UpdateSourceTrigger=PropertyChanged, 
        Path=OwnerNumberEnabled, Mode=TwoWay}"/>

2 个答案:

答案 0 :(得分:1)

您需要使用BindingGroup。 Vincent Sibal有一篇很棒的博客文章:BindingGroups with Item-level Validation

答案 1 :(得分:0)

我不确定这是否是最佳解决方案,但它对我有用。我通常处理这个的方法是创建一个绑定到布尔属性的DataTrigger,它指示有效或无效。

如果布尔值为false,我将边框设置为红色。如果没有,没有边框颜色。

以下是DataTrigger的一个示例:

  <Style TargetType="{x:Type TextBox}">
     <Setter Property="TextElement.FontFamily" Value="Calibri" />
     <Setter Property="TextElement.FontSize" Value="14" />
     <Setter Property="TextElement.Foreground" Value="Black" />
     <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsValid}" Value="False">
           <Setter Property="Effect">
              <Setter.Value>
                <DropShadowEffect BlurRadius="5" Color="Red" ShadowDepth="0" />
              </Setter.Value>
           </Setter>
           <Setter Property="ToolTip" Value="Message Field entered does not exist in Message Output tree." />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsValid}" Value="True">
           <Setter Property="Effect" Value="{x:Null}" />
        </DataTrigger>
     </Style.Triggers>
  </Style>

如果将此样式应用于绑定到同一布尔值的两个文本框,则当布尔值为false时,它们都会以亮红色边框显示。