我是一個總新手,剛剛學習DataContext
和MVVM模型的基礎知識。我現在已經有了一個綁定到視圖模型對象的網格,該對象實現了INotifyPropertyChanged
,但看起來UpdateSourceTrigger
(所有WPF教程告訴我使用的)不適用於WinRT/Metro Style應用程序!如何在WinRT中使用INotifyPropertyChanged?
那麼我該如何實現INotifyPropertyChanged?
我在我的繫繩在這裏結束。我花了幾乎整整一天的時間在最基本的應用程序示例上,只是試圖在點擊某個內容後更新網格。我已經成功地做到這一點,到目前爲止的唯一方法是創建視圖模型的一個全新的實例,並重新分配DataContext
我知道是錯誤的
UPDATE:
我已經取得了一些進展,但事情變得非常奇怪。我有一個視圖模型,帶有一個通用的項目列表。項目列表通過一個PropertyChangedEventHandler連接起來。如果我用一個新的集合替換整個集合,那麼listview會更新。
model.Items = new List<DataItem>{ new DataItem{ Title = "new item" }};
這會產生一個包含上述項目的項目列表。不過,如果我嘗試添加一個項目,什麼也沒有發生
model.Items.Add(new DataItem{ Title = "added item" });
我也嘗試創建它增加了一個項目,專門燒製的PropertyChanged的方法,但也不起作用
這裏的地方會很奇怪。接下來我嘗試了這段代碼。
model.Items.Add(new DataItem { Title = "added item" });
model.Items = new List<DataItem> { new DataItem { Title = "new item" }};
這將導致兩個項目列表:
- new item
- added item
怎麼能這樣呢?代碼說,「添加一個項目」,然後「替換整個列表」,但它以相反的順序執行?
更新2:
的建議,這實際上已經解決了原來的問題,我已經切換到的ObservableCollection。我現在可以添加一個項目,並顯示在列表中。
但是,新奇怪的行爲仍然有效。重置集合之前添加的項目會附加到新集合的末尾。爲什麼我的代碼以相反的順序執行?
UpdateSourceTrigger具有絕對與INotifyPropertyChanged無關... –
@ roryok對於這個問題,最好接受一個答案,並用你的其他問題開一個新問題,這樣它就會保持孤立。 –