我有一个包含多个复选框的列表视图。列表视图中的项目源是一个类的ObservableCollection,它存储了选择项目时我需要的一些默认数据。我的复选框在课堂上有属性,这部分很好用。
问题:如何从一个复选框中提供一个快捷方式,以便为所有复选框启用所有复选框,如下所示。所有的复选框都与ObservableCollection中的类绑定,所以我不确定如何实现这一点。我不能只在类实例中设置它们,因为它只是一个模型,不会引发事件,我不确定我是否可以/应该使用MVVM。我的viewmodel在MyItem Source属性之外不了解它们。
代码示例:
<ListView ItemsSource="{Binding MyItems, Mode=TwoWay}" SelectedItem="{Binding SelectedMyItem, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<!-- When this one is checked I want to enable the rest, shortcut to enable everything -->
<CheckBox Content="Enable All checkboxes" IsChecked="{Binding MyCheckBoxAllIsChecked, Mode=TwoWay}" />
<CheckBox Content="Check Box One" IsChecked="{Binding MyCheckBoxOneIsChecked, Mode=TwoWay}" />
<CheckBox Content="Check Box Two" IsChecked="{Binding MyCheckBoxTwoIsChecked, Mode=TwoWay}" />
<CheckBox Content="Check Box Three" IsChecked="{Binding MyCheckBoxThreeIsChecked, Mode=TwoWay}" />
<CheckBox Content="Check Box Four" IsChecked="{Binding MyCheckBoxFourIsChecked, Mode=TwoWay}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
public class MyItem
{
public bool MyCheckBoxAllIsChecked { get; set; }
public bool MyCheckBoxOneIsChecked { get; set; }
public bool MyCheckBoxTwoIsChecked { get; set; }
public bool MyCheckBoxThreeIsChecked { get; set; }
public bool MyCheckBoxFourIsChecked { get; set; }
}
答案 0 :(得分:0)
如果有&#34;检查所有&#34;从模型的角度来看,功能确实有意义,然后您可以在MyCheckBoxAllIsChecked
的设置器中对其进行编码(尽管将需要INotifyPropertyChanged
才能在UI中正常工作)。但我认为在这种情况下,方法而不是属性会更有意义。
如果您仅为UI添加了MyCheckBoxAllIsChecked
,那么最好将其全部删除,而是在ViewModel中创建一个命令或方法,它将设置模型的所有bool属性。您可以使用其值作为参数通过Command
绑定CheckBox,或者只使用标准Checked
和Unchecked
事件处理程序来调用VM(它是一个UI交互,因此代码可以在这里使用了。)