2010-12-08 20 views
0

我正在處理我的第一個C#/ WPF項目(我是一位具有Flex/As體驗的Java/Web開發人員)。 MVVM模式似乎是要走的路,所以我已經開始攀登學習曲線...在使用MVVM模式時通知狀態修改的最佳方式

我想知道什麼被視爲通知相關的ViewModel對象之間狀態修改的方式。

長話短說,我有一個UserControl,它包含一個綁定到由MyTreeViewModel公開的ReadOnlyCollection的TreeView。

SomethingViewModel實現INotifyPropertyChanged,並在其IsSelected屬性更改時生成一個事件。

MyTreeViewModel有一個附加到SomethingViewModel的PropertyChanged事件的事件處理程序,並更新它管理的一個名爲'CurrentlySelectedElement'的屬性。

MyTreeViewModel還實現INotifyPropertyChanged並在其「CurrentlySelectedElement」屬性更改時生成一個事件。

最後,我在處理選擇更改的另一個ViewModel類中有一個事件處理程序。

這是在C#/ WPF中處理此問題的正確方法嗎?

另外,我並不喜歡在事件處理方法中使用屬性名和字符串;這對我來說似乎不是很重構。現在,我已經通過將屬性名稱暴露爲靜態字符串來處理這個問題,以便我可以簡單地在我的事件處理程序方法中使用以下內容:

if(SomeViewModel.PROPERTY_IS_SELECTED.Equals(e.PropertyName)) { ... } 

你知道更好的選擇嗎?我想應該有辦法做到這一點,但說實話我沒有進一步調查。

感謝您的反饋!

回答

1

檢查出Event Aggregator模式。那裏有相當多的實現。如果您使用的是MVVM框架(https://stackoverflow.com/questions/1280462/what-mvvm-framework-are-you-using,What framework for MVVM should I use?),那麼它很可能也會包含一個實現。

+0

感謝您的回答。我會看看Event Aggregator,它看起來很不錯,並且會給我更多的靈活性。我從MVVM Foundation框架(即ObservableObject和PropertyObserver)中抽取了一些類來解決我關於重構友好性的第二個問題。 – dSebastien 2010-12-09 10:37:15

相關問題