-->

启用或对语境禁用验证(Enabling or disabling validation upon c

2019-09-21 02:45发布

介绍

我有两个TextBox在我看来,每个绑定到我的视图模型(某些属性Property1Property2 )。

TextBox可应一些布尔可选地启用和属性,使用验证IDataErrorInfo视图中的模型+在视图中的一些样式。

问题

我想禁用验证风格时,项被禁用。

NB1:目前,解决方案,我发现是直接在视图模型变化验证方案,但这需要以迫使以通知的属性更改重新读取IDataErrorInfo (虽然性能还没有真正改变,只是选择。 ..)

NB2:我的问题是非常接近此一个 ,但描述和解决方案都太复杂,对我来说,真的明白了吧。

伪代码

<UserControl 

    <UserControl.Resources>
        <Style TargetType="{x:Type Control}" x:Key="ControlValidationStyle">
            ...
        </Style> 
    </UserControl.Resources>

     ...

    <TextBox  
             Text="{Binding Property1, 
                            ValidatesOnDataErrors=True, 
                            UpdateSourceTrigger=PropertyChanged}" 

             IsEnabled="{Binding IsMode1}"

             Style="{StaticResource ControlValidationStyle}"
     />

    <TextBox  
             Text="{Binding Property2, 
                            ValidatesOnDataErrors=True, 
                            UpdateSourceTrigger=PropertyChanged}" 

             IsEnabled="{Binding IsMode1, 
                                 Converter={StaticResource BoolInverse}}"

             Style="{StaticResource ControlValidationStyle}"
     />

</UserControl>

ControlValidationStyle

<Style TargetType="{x:Type Control}" x:Key="ControlValidationStyle">
    <Style.Resources>
        <Style TargetType="ToolTip">
            <Setter Property="Background" Value="Tomato" />
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="Foreground" Value="white" />
        </Style>
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" 
                        Value="{Binding RelativeSource={RelativeSource Self},
                        Path=(Validation.Errors)[0].ErrorContent}" />
            <Setter Property="Background" Value="Bisque"/>
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="2" />
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

Answer 1:

为什么不会使用MultiTrigger而不是Trigger

<MultiTrigger>
    <MultiTrigger.Conditions>
      <Condition Property="Validation.HasError" Value="true" />
      <Condition Property="IsEnabled" Value="true"  />
    </MultiTrigger.Conditions>
 <Setter .../>
</MultiTrigger>


文章来源: Enabling or disabling validation upon context