如何在项目绑定到ObservableCollection <myclass> </myclass>时启用所有复选框

时间:2015-04-20 13:36:48

标签: c# wpf mvvm

我有一个包含多个复选框的列表视图。列表视图中的项目源是一个类的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; }
}

1 个答案:

答案 0 :(得分:0)

如果有&#34;检查所有&#34;从模型的角度来看,功能确实有意义,然后您可以在MyCheckBoxAllIsChecked的设置器中对其进行编码(尽管需要INotifyPropertyChanged才能在UI中正常工作)。但我认为在这种情况下,方法而不是属性会更有意义。

如果您仅为UI添加了MyCheckBoxAllIsChecked,那么最好将其全部删除,而是在ViewModel中创建一个命令或方法,它将设置模型的所有bool属性。您可以使用其值作为参数通过Command绑定CheckBox,或者只使用标准CheckedUnchecked事件处理程序来调用VM(它是一个UI交互,因此代码可以在这里使用了。)