如何在ComboBox折叠隐藏时禁用其验证,能否直接在XAML中实现?
该需求可以直接在XAML代码中实现,常用的有两种实现方案:
- 方案1:通过触发器动态切换绑定,直接移除折叠状态下控件的验证规则
这种方案会在控件可见时应用带验证的绑定,折叠时切换为无验证规则的绑定,从根源上避免折叠状态产生校验错误,代码示例如下:
<ComboBox Name="XYZCb" ItemsSource="{Binding XYZ}" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}"> <ComboBox.Style> <Style TargetType="ComboBox"> <!-- 可见状态下使用带验证的绑定 --> <Setter Property="Text"> <Setter.Value> <Binding Path="xyz" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <valid:ValidationRule ValidatesOnTargetUpdated="True"/> </Binding.ValidationRules> </Binding> </Setter.Value> </Setter> <Style.Triggers> <!-- 折叠状态下使用不带验证的绑定 --> <Trigger Property="Visibility" Value="Collapsed"> <Setter Property="Text"> <Setter.Value> <Binding Path="xyz" UpdateSourceTrigger="PropertyChanged"/> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </ComboBox.Style> </ComboBox>
- 方案2:不修改控件绑定逻辑,仅调整按钮启用规则
该方案不需要改动ComboBox的原有绑定,只需要在按钮的多值绑定中新增控件可见性的绑定参数,调整转换器逻辑即可:当控件处于折叠状态时,直接忽略该控件的校验错误结果,仅当控件可见且存在校验错误时才禁用按钮,修改后的按钮绑定代码如下:
<Button.IsEnabled> <MultiBinding Converter="{StaticResource InverseAndBooleansToBooleanConverter}" Mode="TwoWay"> <Binding ElementName="XYZCb" Path="(Validation.HasError)"/> <Binding ElementName="XYZCb" Path="Visibility"/> <!-- 其余需要校验的控件可按相同格式添加对应绑定 --> </MultiBinding> </Button.IsEnabled>
内容的提问来源于stack exchange,提问作者patrickgc
相关产品推荐
相关产品推荐

