在XAML中绑定到两个布尔属性时处理互斥或条件



所以我有一个要绑定到的类:

public class Awesome {
    public bool OptionA1 { get; set; }
    public bool OptionA2 { get; set; }
    public bool OptionB1 { get; set; }
    public bool OptionB2 { get; set; }
}

当我在GUI中公开这个类时,我有两个单选按钮(称为radioButtonA和radiobutton B),让用户在组A和组B之间进行选择,还有两个复选框,让用户根据选中的单选按钮分别更改A1/A2和B1/B2。

类中的逻辑在技术上并不像我在GUI上那样区分A和B。因此,如果OptionA1==True和OptionB1==True,则类将按预期执行OptionA1和B1的行为。

但是,我想将组A和B公开为exclusive或:这意味着如果OptionA1或OptionA2设置为true,则OptionB1和OptionB2必须都为false。反之亦然

以下绑定将根据选中的单选按钮/组自动重新调整复选框的用途/重新绑定复选框,但不会强制组之间的独占或关系。因此,用户可以单击RadioButtonA并选中这两个框。如果用户随后单击RadioButtonB,则OptionA1和OptionA2仍设置为true(如预期)。当RadioButtonB被选中时,我如何自动将它们设置为false?

<CheckBox Content="Do Option 1">
    <CheckBox.Style>
        <Style TargetType="CheckBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=radioButtonA, Path=IsChecked}" Value="True">
                    <Setter Property="IsChecked">
                        <Setter.Value>
                            <Binding Path="OptionA1" Mode="TwoWay"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=radioButtonB, Path=IsChecked}" Value="True">
                    <Setter Property="IsChecked">
                        <Setter.Value>
                            <Binding Path="OptionB1" Mode="TwoWay"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </CheckBox.Style>
</CheckBox>

我认为您无法在直接XAML中做到这一点。你必须在代码隐藏/viewmodel中编写代码,或者编写一个自定义的IValueConverter(也许是MultiConverter?)来处理它。不管怎样,它都是一些代码。

最新更新