Mvvm取消选中基础Listbox对象中的Checked Box

时间:2017-03-20 18:44:19

标签: c# wpf checkbox mvvm

我有一个listview,它的项源被数据绑定到一个自定义数据类型的可观察集合。列表中的每个对象都具有属性DisplayName(字符串)和IsChecked(bool)等。数据模板基本上是:

<CheckBox VerticalAlignment="Center"
          Content="{Binding DisplayName}"
          IsChecked="{Binding IsChecked}"/>

当我勾选方框时,我能够轻松确定现在已经检查过的基础项目。但是在viewmodel中,如果我想取消选中一个项目,它似乎不会以其他方式工作。

我在可观察集合的setter中实现了NotifyProperty更改,但是我是否需要为bool执行一些特殊操作?

在Viewmodel中,以下代码是我尝试取消选中已选中复选框的位置(作为运行命令后的刷新类型):

foreach (var bill in AllBills)
{
    bill.IsChecked = false;
}

2 个答案:

答案 0 :(得分:2)

  

我在可观察集合的setter中实现了NotifyProperty更改,但是我是否需要为bool执行一些特殊操作?

是。当您为集合属性提供新集合时,您将为该属性引发PropertyChanged。这与在集合中的项目上更改的属性值有什么关系?什么都没有。当您在其中一个项目上设置IsChecked时,是否有任何可以想象的方式让该代码点击集合属性的setter?不。

集合中的项目必须自己实施INotifyPropertyChangedIsChecked的设置者必须在PropertyChanged的值更改IsChecked时提升{{1}} 。如果您为集合属性执行此操作,我希望您已经知道如何。但如果遇到任何障碍,请给我发表评论。

WPF学习曲线的一个难点部分是开发一种可靠的直观感觉,即通过秘密框架彩虹小马魔法发生的事情之间的界限,以及你必须自己做的事情。该边界线上的一个位置就是您现在站在哪里。

答案 1 :(得分:0)

如果在viewmodel中实现INotifyPropertyChanged,并在IsChecked属性中触发事件,则只需将复选框更改为:

<CheckBox VerticalAlignment="Center"
      Content="{Binding DisplayName}"
      IsChecked="{Binding IsChecked, Mode=TwoWay}"/>