【发布时间】:2017-06-24 20:21:39
【问题描述】:
我在grid 中有一堆checkboxes。我有两个buttons,一个“全选”按钮和一个“取消全选”按钮。名称不言自明,但是当我单击“全选”按钮时,应选中所有复选框。当我点击“uncheck all”按钮时,所有的复选框都应该被取消选中。
现在,我可以创建一个命令来遍历每个复选框并选中/取消选中按钮,但我想知道是否有更简单的方法使用一些绑定。例如,我试过这个:
在 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"); }
}
上述方法不起作用,因为所有复选框都绑定到同一个布尔值。因此,选中/取消选中一个对所有这些都是一样的。但我想做这样的事情。有什么我没有想到的,还是循环遍历它们的主要方法?
【问题讨论】:
-
考虑改写标题,当我阅读
without a loop部分时,我最初认为Bad question, of course you need a loop!。但是,以您尝试过的示例为例,这实际上是一个很好的问题。 -
有不同的方法可以在没有迭代的情况下做你想做的事,但我不会告诉你 - 它会不必要地混淆你正在尝试做的事情。无需将切换复选框变成过于复杂的混乱
-
我和@Dbl 在一起。为什么要将简单循环可以解决的问题过于复杂化?
-
这将是违规行为。您应该在托管视图模型中使用命令来运行视图模型操作。如果您认为代码隐藏是必要的,您仍然应该查看更多教程。对于几乎每种情况,都有一个相当简单的基于视图模型+绑定的解决方案来解决您的问题
-
“将这个循环放在窗口的 xaml.cs 中会破坏 MVVM 模式吗?”。是的。您应该遍历源集合中的项目并设置数据对象的 IsChecked 属性。