Search code examples
c#wpfvisibilityvalidationrules

How to disable validation of a combox element when visibility is collapsed?


I want to disable the validation of a ComboBox or a TextBox when their visibility is collapsed. Can I realize this within the XAML code?

            <ComboBox Name="XYZCb" ItemsSource="{Binding XYZ}" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}">
                <ComboBox.Text>
                    <Binding Path="xyz" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <valid:ValidationRule ValidatesOnTargetUpdated="True"/>
                        </Binding.ValidationRules>
                    </Binding>
                </ComboBox.Text>
            </ComboBox>

Button property binding:

<Button.IsEnabled>
    <MultiBinding Converter="{StaticResource InverseAndBooleansToBooleanConverter}"
                  Mode="TwoWay">
        <Binding ElementName="XYZCb" Path="(Validation.HasError)"/> 
    </MultiBinding>
<Button.IsEnabled>

Solution

  • If I understand correctly what you need:

        <Button>
            <Button.Style>
                <Style TargetType="Button">
                    <Style.Triggers>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Binding="{Binding Path=(Validation.HasError), ElementName=XYZCb}" Value="True"/>
                                <Condition Binding="{Binding Visibility, ElementName=XYZCb}" Value="Visible"/>
                            </MultiDataTrigger.Conditions>
                            <Setter Property="IsEnabled" Value="False"/>
                        </MultiDataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    

    Don't forget to remove your <Button.IsEnabled> binding.