2010-06-25 22 views
0

我想知道是否有什麼辦法我能勝任當一個集合的變化,這之後,顯示一條消息給用戶。使用命令通知該集合發生更改

由於使用MVVM IM,我沒有到視圖項目中的模型中的任何引用,所以我不能做

MyCollection col = InstanceOfViewModel.Read(); 

由於視圖不知道「MyCollection的」任何事情,我不想要測試方法本身,如果像上面的代碼:

if(InstanceOfViewModel.Read().Count == 0) 

所以我想到了命令。我已經在使用一個來處理我的節能&更新條件(而不是大量的if)。但現在我陷入困境。我不知道我該怎麼做/使用原因,ObservableCollections公開一個事件,CollectionChanged。

一個解決方案可能是:讓viewmodel預訂此事件,並在發生時檢查計數是否等於0,如果爲true,則向用戶顯示:「您的搜索未檢索到任何行」或其他任何內容。但我不喜歡在視圖模型中使用MESSAGEBOXES,消息和任何類型的用戶交互im試圖委託給視圖

但我想知道如果我可以使用COMMANDS,或者如果我得到在一個相對容易實現的東西中太複雜了。

等待答案,並在此先感謝!

+0

我認爲你應該相信你的直覺,當你說「...即時消息太複雜...」 這個集合是如何更新的第一個地方? – 2010-06-25 18:27:17

+0

Wonko,這個ViewModel暴露了一個方法Read,它使用模型類的一個實例,讓我們調用Employee。因此,每次我需要更新EmployeeCollection時,我都使用Employee實例,它調用其特定DAO的Read方法,並返回一個ObservableCollection EmployeeCollection = MyEmployeeInstance.Read(); return EmployeeCollection; 就是這樣。所有模型都從通用接口繼承,這是一種策略模式實現。 但是,有時候我會讓事情太複雜。也許我應該訂閱CollectionChanged並完成它。 – Edward 2010-06-25 18:44:16

回答

0

如果你的集合是在一個視圖模型,並且你正在使用onPropertyChanged ...隨時你的整個集合改變(而不是單個項目),它會觸發onPropertychanged,你可以在onPropertyChanged方法中觀察......也許我是不理解你的代碼結構...

+0

dep,是的我的模型類實現INotifyPropertyChanged,但我沒有注意到它也會觸發整個集合本身。謝謝,生病嘗試一下。 – Edward 2010-06-26 17:32:14