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 или непосредственно в блоге Марлона Греча.

Другие вопросы по тегам