使用MVVM模式时,在ViewModel对象之间通知状态修改的最佳方法

时间:2010-12-08 14:10:58

标签: events mvvm event-handling notifications viewmodel

我正在开发我的第一个C#/ WPF项目(我是具有一些Flex / As经验的Java / Web开发人员)。 MVVM模式似乎是要走的路,所以我开始攀登学习曲线......

我想知道在相关的ViewModel对象之间通知状态修改的方法是什么。

长话短说,我有一个UserControl,其中包含一个绑定到MyTreeViewModel公开的ReadOnlyCollection的TreeView。

SomethingViewModel实现了INotifyPropertyChanged,并在其“IsSelected”属性发生更改时生成事件。

MyTreeViewModel有一个事件处理程序附加到SomethingViewModel的PropertyChanged事件,并更新它管理的名为'CurrentlySelectedElement'的属性。

MyTreeViewModel还实现了INotifyPropertyChanged,并在其“CurrentlySelectedElement”属性发生变化时生成事件。

最后,我在另一个处理选择更改的ViewModel类中有一个事件处理程序。

这是在C#/ WPF中接近这个的正确方法吗?

另外,我真的不喜欢在我的事件处理方法中使用Strings的属性名称;它对我来说似乎没有很好的重构。现在,我已经通过将属性名称暴露为静态字符串来解决这个问题,因此我可以在事件处理程序方法中使用以下代码:

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

你知道一个更好的选择吗?我想应该有办法做到这一点,但说实话,我还没有进一步调查。

感谢您的反馈!

1 个答案:

答案 0 :(得分:1)

查看Event Aggregator模式。那里有很多实现。如果您正在使用MVVM框架(https://stackoverflow.com/questions/1280462/what-mvvm-framework-are-you-usingWhat framework for MVVM should I use?),那么它也可能包含一个实现。