Лучший способ уведомить об изменении состояния между объектами ViewModel при использовании шаблона MVVM - PullRequest
0 голосов
/ 08 декабря 2010

Я работаю над своим первым проектом на C # / WPF (я Java / Web-разработчик с некоторым опытом работы с Flex / As). Модель MVVM, казалось, была подходящим способом, поэтому я начал подниматься по кривой обучения ...

Я хотел бы знать, что считается способом уведомления об изменениях состояния между связанными объектами ViewModel.

Короче говоря, у меня есть UserControl, содержащий TreeView, который связан с коллекцией ReadOnlyCollection, предоставляемой MyTreeViewModel.

SomethingViewModel реализует INotifyPropertyChanged и генерирует событие, когда изменяется его свойство IsSelected.

MyTreeViewModel имеет обработчик события, присоединенный к событию PropertyChanged SomethingViewModel, и обновляет свойство, которым он управляет, под названием «В настоящее время выбранный элемент».

MyTreeViewModel также реализует INotifyPropertyChanged и генерирует событие, когда изменяется его свойство CurrentSelectedElement.

Наконец, у меня есть обработчик событий в другом классе ViewModel, который обрабатывает изменение выбора.

Это правильный подход к этому в C # / WPF?

Кроме того, я не очень люблю использовать имена свойств со строками в моих методах обработки событий; Мне кажется, это не очень удобно для рефакторинга. Пока я справился с этим, представив имя свойства в виде статической строки, так что я могу просто использовать следующее в моем методе обработчика событий:

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

Знаете ли вы лучшую альтернативу? Я думаю, что должен быть способ сделать это, но, честно говоря, я еще не исследовал это.

Спасибо за ваш отзыв!

1 Ответ

1 голос
/ 08 декабря 2010

Проверьте шаблон Event Aggregator . Существует довольно много реализаций. Если вы используете инфраструктуру MVVM (https://stackoverflow.com/questions/1280462/what-mvvm-framework-are-you-using, Какую инфраструктуру для MVVM мне следует использовать? ), есть вероятность, что она также будет содержать реализацию.

...