使用绑定而不是循环选中/取消选中所有复选框?

时间:2017-02-07 14:31:00

标签: c# wpf checkbox mvvm

我在checkboxes中有一堆grid。我有两个buttons,一个'全部检查'按钮和'取消选中所有'按钮。这些名字不言自明,但当我点击“全部检查”时,按钮,应检查所有复选框。当我点击“取消选中所有'按钮,应取消选中所有复选框。

现在,我可以创建一个命令来遍历每个复选框并检查/取消选中它们的按钮,但我想知道是否有更简单的方法使用某些绑定。例如,我试过这个:

在xaml中:

<Grid>
    <CheckBox Grid.Row="1"
              Grid.Column="2"
              IsChecked="{Binding IsChecked}" />
    <CheckBox Grid.Row="2"
              Grid.Column="2"
              IsChecked="{Binding IsChecked}"/>
</Grid>

在我的视图模型中:

private bool _isChecked;
public bool IsChecked
{
    get { return _isChecked; }
    set { _isChecked = value; OnPropertyChanged("IsChecked"); }
}

上面的内容并不起作用,因为所有复选框都绑定到同一个bool。因此,检查/取消选中一个对所有人都做同样的事情。但是我想做那样的事情。有什么我没有想到的,或者是通过它们全部循环的主要方式吗?

2 个答案:

答案 0 :(得分:1)

  

是否有一些我没有想到的东西,或者是通过它们循环的主要方式?

不,是的。您应该使用循环来迭代源集合中的所有项目,并将其各自的 IsChecked属性设置为true。

显然,如果您希望能够单独检查和取消选中每个CheckBox,则无法将所有CheckBox绑定到单个源属性,只需设置此属性即可。

除了使用某种循环之外,没有其他或更好的方法可以做到这一点。

答案 1 :(得分:1)

ViewModel方法运行正常

private bool _isChecked;
public bool IsChecked
{
    get { return _isChecked; }
    set { _isChecked = value; OnPropertyChanged("IsChecked"); }
}

关键是你必须定义一个ItemsSource的绑定(相当于循环)和一个具有IsChecked属性的对象的集合。这样,每个复选框都将独立启用和禁用