2010-08-06 66 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顯示它至少已經嘗試過一次成功。

相關問題