2010-08-06 145 views
26

在MVVM模式中,如何通知视图模型的所有属性已更改?我不想调用所有属性的所有notifypropertychanged事件。如何通知视图模型的所有属性已更改

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

感谢您的帮助。

+0

+1今天教我的东西。 – Gishu 2010-08-06 09:25:40

回答

45

用一个空字符串作为属性名就提高PropertyChanged事件:

OnPropertyChanged(String.Empty); 
+2

是的,使用null或空字符串触发PropertyChanged事件的窍门。 – 2010-08-06 14:47:41

+0

您好托马斯,这是否适用于Uwp解决方案呢?我发现在某些项目中,这在Windows 8.1或通用Windows平台应用程序中效果不佳。感谢所有人! – soydachi 2017-03-27 13:41:19

+0

@dachibox,我从来没有使用UWP,所以我不知道...但我希望它能够工作。 – 2017-03-27 14:31:50

0

好我的理解从你的问题是这样的..

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

视图绑定到视图模型,代表实体。您现在想要替换支持实体并指示视图刷新以更新到较新的实体。

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

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

这样你就不会在ViewModel中创建n个委托属性。 A google search result显示它至少已经尝试过一次成功。

相关问题