两个复选框之间的wpf绑定

时间:2014-05-06 21:20:41

标签: c# wpf

  <CheckBox x:Name="cb1" IsChecked="{Binding cb1Enabled}"/>
  <CheckBox x:Name="cb2" IsEnabled="{Binding ElementName=cb1, Path=IsChecked}" IsChecked="{Binding cb2Enabled}">

我有两个CheckBoxes cb1和cb2。两者都绑定2个bool。 cb1Enabled和cb2Enabled。 如您所见,只有在选中cb1并且它的IsChecked属性绑定到特定的bool依赖属性时才会启用cb2。

一切都很好但是我想在取消选中cb1时取消选中cb2,因此,将cb2Enabled设置为false。有没有办法实现这个目标?

所以我想我可以说我希望cb2的IsChecked属性绑定到cb1的isChecked属性以及cb2Enabled dp。

1 个答案:

答案 0 :(得分:1)

这可能最好在视图模型中完成。使用双向绑定:

<CheckBox x:Name="cb1" IsChecked="{Binding cb1Enabled,Mode=TwoWay}"/>

然后,在“cb1Enabled”的setter中设置“cb2Enabled”属性。例如:

public bool cb1Enabled
{
    get { return bool _cb1Enabled; }
    set
    {
        _cb1Enabled = value;
        if (!_cb1Enabled)
            cb2Enabled = false;
        RaisePropertyChanged();
    }
}
private bool _cb1Enabled;

如果您不喜欢上述内容,则仅限XAML的替代方法是使用Unchecked ChangePropertyAction上的事件触发器:

<CheckBox x:Name="cb1" IsChecked="{Binding cb1Enabled}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Unchecked">
            <ei:ChangePropertyAction TargetObject="{Binding}" PropertyName="cb2Enabled" 
                                     Value="False" 
                                     />
        </i:EventTrigger EventName="Unchecked">
    </i:Interaction.Triggers>
</CheckBox>