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

时间:2011-05-24 15:25:32

标签: wpf xaml binding datatrigger

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

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和radioButtonB),让用户在A组和B组之间进行选择,我有两个复选框让用户更改A1 / A2和B1 / B2分别取决于哪些radiobutton缺血。

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

但是,我希望将A组和B组显示为exclusive-or:意味着如果OptionA1或OptionA2设置为true,则OptionB1和OptionB2都必须为false。反之亦然。

以下绑定将根据检查的radiobutton / group自动重新调整/重新绑定复选框,但不会强制执行组之间的异或关系。因此,用户可以单击RadioButtonA并选中这两个框。如果用户然后单击RadioButtonB,则OptionA1和OptionA2仍设置为true(如预期的那样)。当RadioButtonB缺血时,如何自动将它们设置为假?

<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>

1 个答案:

答案 0 :(得分:2)

我认为你不能在直接的XAML中做到这一点。您将不得不在代码隐藏/ viewmodel中编写代码或编写处理它的自定义IValueConverter(可能是MultiConverter?)。无论哪种方式,它的一些代码。