Связь модели Образцового Представления представления MVVM-

Как я иду о наличии двух моделей представления, общаются друг с другом использование Свет MVVM. Я знаю, как использовать класс средства рассылки и регистр и т.д. Вот мой Сценарий

A Settings View ---> a Settings View Model 
                                  .
                                  .
                                  .

A MainPage View ---> A MainPage ViewModel

Если что-то изменится в Представлении Настроек, то оно будет обмениваться сообщениями назад к Модели Представления Настроек. Таким образом я хочу, чтобы Модель Представления Настроек связалась с Моделью Представления MainPage о том, что изменилось. MainPage ViewModel затем скажет Представление.

13
задан Mike Diaz 19 March 2010 в 03:17
поделиться

3 ответа

Распространенным шаблоном для этого типа проблем является Посредник (класс, на который ссылаются обе модели представления и который может использоваться для передачи сообщений между ними).

С тех пор класс Mediator был перемещен в Cinch WPF / SL MVVM Framework , который, похоже, все еще активно разрабатывается / поддерживается.

Я предпочитаю шаблон Агрегатор событий , пример которого можно найти в структуре Prism. В этом шаблоне разные модели представления подписываются на события от агрегатора, а другие публикуют события.

Надеюсь, это поможет

18
ответ дан 1 December 2019 в 22:22
поделиться

Я поддерживаю предложение Найджела использовать Посредник, взгляните на блог Джоша Смита и его реализацию:

http://joshsmithonwpf.wordpress.com/?s=mediator

Внизу вы можете скачать Прототип и Демо Посредника, просто запомните чтобы переименовать его из .doc в .zip.

Надеюсь, это поможет ...

3
ответ дан 1 December 2019 в 22:22
поделиться

Вы можете попробовать реализовать инверсию зависимостей. Определите интерфейс с некоторыми действиями / контрактами. Реализуйте этот интерфейс в MainviewModel. Передайте этот интерфейс как переменную-член в SettingsViewModel. Поэтому всякий раз, когда модель представления настроек должна сообщать что-то в main, она будет использовать этот интерфейс. {{ 1}} И, кроме того, другие модели представлений могут использовать ту же стратегию.

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();    
     }

  }
}

1
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: