MVVM- Посмотреть модель - Посмотреть модель связи
Как мне общаться с двумя моделями представлений, используя MVVM Light? Я знаю, как использовать класс мессенджера, зарегистрироваться и т. Д. Вот мой сценарий
A Settings View ---> a Settings View Model
.
.
.
A MainPage View ---> A MainPage ViewModel
Если что-то изменится в представлении настроек, оно вернется в модель представлений настроек. Итак, я хочу, чтобы модель представления настроек сообщала модели представления главной страницы о том, что изменилось. Затем MainPage View Model сообщит View.
4 ответа
Распространенным шаблоном для этого стиля проблемы является Mediator (класс, который обе ссылаются на модели и могут использоваться для передачи сообщений между ними).
С тех пор класс Mediator был перенесен в Cinch WPF / SL MVVM Framework, который, как представляется, все еще активно разрабатывается / поддерживается.
Шаблон, который я предпочитаю, - это агрегатор событий, пример которого можно найти в структуре Prism. В этом шаблоне различные модели представлений подписываются на события из агрегатора, а другие публикуют события.
Надеюсь это поможет
Второе предложение Найджела об использовании Медиатора, посмотрите на блог Джоша Смита и его реализацию:
http://joshsmithonwpf.wordpress.com/?s=mediator
Внизу вы можете скачать Mediator Prototype и Demo, просто не забудьте переименовать его из.doc в.zip.
Надеюсь это поможет...
Одна вещь, которую вы можете попробовать - попытаться реализовать Deverdency Inversion. Определите интерфейс с некоторыми действиями / контрактами. Реализуйте этот интерфейс в MainviewModel. Передайте этот интерфейс как переменную-член в SettingsViewModel. Таким образом, всякий раз, когда модель представления настроек должна уведомлять что-либо о главном, она будет использовать этот интерфейс. Кроме того, другие модели представлений могут использовать ту же стратегию.
public interface IMessenger
{
void NotifyAction();
}
public class MainViewModel:InotifyProprtyChanged,IMessenger
{
public void NotifyAction()
{
}
}
public class SettingsViewModel:INotifyPropertyChanged
{
public IMessenger Messenger{get;set;}
public void SomeCommandExecutor()
{
if(Messenger!=null)
{
Messenger.NotifyAction();
}
}
}
Может быть, вы можете использовать шаблон Sur Mediator V2, созданный Джошем Смитом и Марлоном Греком.
Ознакомьтесь с классом Messenger V2 в библиотеке MVVM Foundation или непосредственно в блоге Марлона Греча.