車型

2012-06-28 42 views
0

在我的ViewModel名單上手動調用的PropertyChanged我有一個屬性,它是模型列表:車型

private List<LocationModel> _locations = null; 
public List<LocationModel> Locations 
{ 
    get 
    { 
     return this._locations; 
    } 
    set 
    { 
     this._locations = value; 
     RaisePropertyChanged("Locations"); 
    } 
} 

LocationModel類未實現INotifyPropertyChanged,所以當我更新的屬性列表中的項目,UI不會更新。我嘗試通過在更改列表項後手動提高事件來實現此目的,但這不起作用。有人可以解釋爲什麼這種方法不起作用?

在此先感謝。

回答

2

INotifyPropertyChanged只適用於實現該接口的對象的實例屬性。不屬於屬性實現接口。如果你想這個工作,LocationModel需要實現INotifyPropertyChanged。如果您沒有源代碼給LocationModel,或者因任何原因無法更改它,則需要將所有您想要在包裝類中實現的屬性包裝在實現INotifyPropertyChanged的包裝類中。您可以動態使用DynamicProxy(無效鏈接)DynamicProxy (cached)

+0

我剛剛注意到你在另一個回覆的評論中提到了關於「純粹模型」的內容。我完全同意。但我從不向接口公開一個模型,我只公開ViewModels。你的LocationViewModel在哪裏? – Tewr

1

你可以用RaisePropertyChanged(null)破解它,它會告訴視圖更新所有內容,不推薦,最好的解決方案是實現INPC,或者創建一個LocationWrapper來爲你實現它。如果你想變得極端,你可以使用動態對象來代理模型,或者使用動態代理來做同樣的事情。

+0

感謝您的回覆。我試着調用RaisePropertyChanged(null),但這也沒有奏效。由於我想保持某種「純粹模式」,所以創建一些包裝器並不合適。 – Narek

+0

您將不得不提高從綁定到UI的對象更改的屬性,這是您的純模型,因此要麼放棄純模型,要麼爲模型創建視圖模型。 –

1

使用ObservableCollection而不是List。對ObservableCollection內部項目的更改將觸發對視圖的通知。

private ObservableCollection<LocationModel> _locations = null; 
public ObservableCollection<LocationModel> Locations 
    { 
    get 
    { 
     return this._locations; 
    } 
    set 
    { 
     this._locations = value; 
     RaisePropertyChanged("Locations"); 
    } 
} 
+0

感謝您的迴應,但ObservableCollection僅跟蹤集合更改,例如插入或刪除項目。 – Narek