2010-12-08 36 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

相关问题