ViewModel Event Communication - PullRequest
       0

ViewModel Event Communication

1 голос
/ 18 марта 2011

У меня есть приложение WP7, которое я создаю, и я хочу, чтобы экран входа отображался, если пользователь еще не вошел в систему. У меня есть Main.xaml, который имеет модель просмотра MainViewModel.cs. Для частей входа в систему или регистрации я встроил их как Grid в Main.xaml, но я думаю, что их использование в качестве пользовательского элемента управления также будет работать нормально. Части входа и регистрации будут иметь свою собственную модель представления, возможно, одну и ту же для обоих, AccountViewModel.cs, для которой Grid или пользовательский элемент управления имеет DataContext, установленное в.

После того, как пользователь зарегистрируется или войдет в систему, что происходит в AccountViewModel.cs, каков лучший способ для MainViewModel.cs или Main.xaml узнать, что он завершен, и он может начать загрузку данных или делать что угодно нужно сделать?

Моя первоначальная мысль - использовать систему сообщений MVVM Light. После регистрации / входа в систему передайте сообщение о том, что оно завершено, и MainViewModel.cs будет зарегистрировано в сообщении и сможет действовать в соответствии с ним.

Есть ли другой способ или более правильный способ сообщить Main, что что-то произошло с его ребенком?

Если это слишком сложно, я могу добавить примеры кода.

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Система обмена сообщениями, такая как в MVVM Light, является отличным способом развязать действия такого рода и предоставлять уведомления так, как вы их описываете. Не могу сказать, потому что я бы защищал что-то еще на самом деле. Библиотека Prism предоставляет EventAggregator, что делает то же самое, но если вы уже используете MVVM Light, то придерживайтесь этого.

0 голосов
/ 19 марта 2011

Другой подход заключается в хранении информации такого рода (IsLoggedIn) в «глобальной модели представления», такой как, например, SettingsViewModel.Instance. Для модели представления глобального значения, такой как Настройки, это подход, который имеет большой смысл ИМХО. Если вы заставите это свойство вызывать событие PropertyChanged, это позволит вам динамически изменять пользовательский интерфейс при изменении свойства и плавно скрывать пользовательский интерфейс входа, например.

ура, Laurent

...