【问题标题】:How to notify all properties of the view model has changed如何通知视图模型的所有属性已更改
【发布时间】:2010-08-06 09:01:37
【问题描述】:

在 MVVM 模式中,如何通知视图模型的所有属性发生了变化?我不想调用所有属性的所有 notifypropertychanged 事件。

我有一个实体类,在视图模型中,我将实体的所有公共字段都写为公共属性。我想重新绑定新实体,只写一行代码来通知所有属性都已更改?

感谢您的帮助。

【问题讨论】:

  • +1 今天教我一些东西。

标签: mvvm inotifypropertychanged


【解决方案1】:

只需使用空字符串作为属性名称引发PropertyChanged 事件:

OnPropertyChanged(String.Empty);

【讨论】:

  • 是的,使用 null 或空字符串触发 PropertyChanged 事件就可以了。
  • 嗨,Thomas,这也适用于 Uwp 解决方案吗?我在一些项目中看到这在 Windows 8.1 或通用 Windows 平台应用程序中运行不佳。谢谢大家!
  • @dachibox,我从未使用过 UWP,所以我不知道...但我希望它也能正常工作。
  • 如果有人知道这个问题,我只是将这个问题作为一个独立的线程发布,我很欣赏它。 stackoverflow.com/questions/43049019/…
【解决方案2】:

好吧,我从你的问题中了解到的是这个..

View <> ViewModel <> Entity (with a bunch of properties)

View 绑定到 ViewModel,后者委托给 Entity。您现在想要替换支持实体并通知视图刷新以更新到较新的实体。

我建议在 ViewModel 中实现一个索引器,该索引器接收一个字符串(支持属性的名称)。如果需要,可以将 ViewModel 用作缓存,仅在未命中时委托给支持实体。

当您替换实体时,viewModel 会清除其缓存并使用 String.Empty 或 null 触发 NotifyPropertyChanged(在索引器集中)。我今天学到的,indicates all properties have changed。

这样您就不会在 ViewModel 中创建 n 个委托属性。 google search result 表明它至少尝试过一次并成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2023-04-02
    • 2014-05-14
    • 2021-12-18
    • 2012-03-12
    • 2014-10-06
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多