WPF/XAML - 选中单选按钮时设置 ValidatesOnDataErrors = false/true 的 DataTriggers

标签 wpf xaml mvvm triggers

我正在开发一个使用 DataAnnotations 实现 MVVM 设计模式的应用程序。该应用程序是一个动态生成的页面列表。在其中一个页面上,我有 10 个必填字段和 2 个是/否单选按钮。这 10 个字段分为两组,每组都带有一个边框标签。每个边框的可见性都与隐藏/可见的单选按钮绑定(bind)。

我的问题是,如果选择了"is"并显示了相关的 5 个必需文本框,我如何将 ValidatesOnDataErrors 设置为 false/true 并清除其他隐藏的必需文本框的文本框值?

这是一个代码片段。

谢谢

<Border>
<Border.Style>
  <Style>
   <Setter Property="Border.Visibility" Value="Hidden"></Setter>
    <Style.Triggers>
     <DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
                  Value="True">
       <Setter Property="Border.Visibility" Value="Visible"></Setter>
     </DataTrigger>
    </Style.Triggers>
   </Style>
  </Border.Style>
  <Grid Height="Auto" Width="Auto">
   <Label Name="JobTitle"
               Content="{x:Static properties:Resources.JobTitlelbl}" />
    <TextBox Name="JobTitle" Text="{Binding JobTitle, Mode=TwoWay, 
     ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}">
     <TextBox.Style>
      <Style TargetType="{x:Type TextBox}">
       <Setter Property="Text" Value="{Binding PrimaryInsuredBusinessDuties, Mode=TwoWay,
          UpdateSourceTrigger=PropertyChanged, IsAsync=True}" />
       <Style.Triggers>
       <DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
          Value="True">
        <Setter Property="Text" Value="{Binding JobTitle, Mode=TwoWay, 
           ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
       </DataTrigger>
       <DataTrigger Binding="{Binding ElementName=PresentlyEmployed_yes, Path=IsChecked}"
         Value="False">
        <Setter Property="Text" Value="{Binding JobTitle, Mode=TwoWay, 
          ValidatesOnDataErrors=False, UpdateSourceTrigger=PropertyChanged}"></Setter>
       </DataTrigger>
      </Style.Triggers>
     </Style>
    </TextBox.Style>
   </TextBox>
  </Grid>
</Border>

最佳答案

尝试设置 Validation.Template{x:Null}如果它不应该显示验证错误

<StackPanel>
    <ListBox x:Name="MyListBox" SelectedIndex="0">
        <ListBoxItem>Validate Value 1</ListBoxItem>
        <ListBoxItem>Validate Value 2</ListBoxItem>
    </ListBox>

    <TextBox Text="{Binding Value1, ValidatesOnDataErrors=True}">
        <TextBox.Style>
            <Style TargetType="{x:Type TextBox}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedIndex, ElementName=MyListBox}" Value="1" >
                        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
    <TextBox Text="{Binding Value2, ValidatesOnDataErrors=True}">
        <TextBox.Style>
            <Style TargetType="{x:Type TextBox}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedIndex, ElementName=MyListBox}" Value="0" >
                        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>
</StackPanel>

关于WPF/XAML - 选中单选按钮时设置 ValidatesOnDataErrors = false/true 的 DataTriggers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123687/

相关文章:

即使不需要剪辑,WPF 剪辑 - 如何将其关闭?

.net - WPF 可以/是否有多个 GUI 线程?

javascript - Knockout Js 提交绑定(bind)启动无限循环

c# - 如何执行容器ViewModel与包含的ViewModel之间的通信?

wpf - 如何从 ViewModel 中的 View 获取动态值?

c# - 有没有办法调整其内容的边框大小? (Winnrt Xaml)

c# - 像图片库一样的Combobox下拉菜单

c# - 如何在 MVVM Light 应用程序中对 DataGrid 行进行颜色编码

c# - 在通用 Windows 应用程序中从 Windows Live SDK 接收刷新 token

c# - 如何以编程方式设置 AppBar 高度?