c# - Mvvm 取消选中底层 Listbox 对象中的选中框

标签 c# wpf checkbox mvvm

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

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

当我选中这些框时,我能够轻松地确定现在已选中的基础项目。但是在 View 模型中,如果我想取消选中一个项目,它似乎无法以其他方式工作。

我在可观察集合的 setter 中实现了 NotifyProperty 更改,但是我需要为 bool 做一些特别的事情吗?

在 Viewmodel 中,以下代码是我尝试取消选中复选框的地方(作为命令运行后的刷新):
foreach (var bill in AllBills)
{
    bill.IsChecked = false;
}

最佳答案

I have NotifyProperty change implemented in the setter for the observable collection, but do i need to do something special for the bool?



是的。当你给你的集合属性一个新集合时,你提出了 PropertyChanged对于那个属性。这与集合中项目的属性值更改有什么关系?什么都没有。当您设置 IsChecked在其中一项上,是否有任何可以想象的方式让该代码为您的集合属性命中 setter?没有。

您在集合中的项目必须自己实现 INotifyPropertyChanged ,以及 IsChecked 的 setter 必须提高PropertyChangedIsChecked 的值变化。如果您为 collection 属性执行此操作,我希望您已经知道如何操作。但是,如果您遇到任何障碍,请向我发表评论。

WPF 学习曲线中最困难的部分之一是在 secret 框架彩虹小马魔术刚刚发生的事情和你必须自己做的事情之间建立一种可靠的直观感觉。那个边界上的一个点就是你现在站立的地方。

关于c# - Mvvm 取消选中底层 Listbox 对象中的选中框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42911584/

相关文章:

.net - 有没有办法在不命名目标控件的情况下使用 Wpf 标签的目标?

javascript - 在文本区域中显示复选框的值

android - TextView 中的 AlertDialog "pushed out"中的复选框

javascript - 无法设置复选框 HTML/CSS 的样式

C#:wpf 将组合框项添加到多个组合框

c# - 这里为什么要用 Thread.MemoryBarrier 呢?

c# - 如何在开发和生产 WPF 引用之间动态切换

c# - 这个线程安全吗?多次命中断点

c# - 如何将英镑符号从 C# Web App 正确导出到 Excel? (生产£而不是£)

wpf - 测试驱动开发 - WPF