Вопрос

Я строю приложение WPF и пытаюсь соответствовать лучшим практикам MVVM. Я использую MVVM Foundation рамки и заметили Мессенджер класс, который я прочитал, должен использоваться Диалоги обработки в WPF. Анкет Это звучит великолепно, но я совершенно не понимаю, как использовать посланника для этой цели. Буквально все, что я хочу сделать, это открыть модальный диалог -мне не нужно передавать какие -либо сообщения вперед и назад.

Было ли намерение использования класса мессенджера для тех случаев, когда диалоги требуют сообщения от его родителя или вернуть сообщение своему родителю? Это излишне для диалога о? Будет ли мне лучше просто добавить код в обработчик событий, чтобы показать диалог?

Это было полезно?

Решение

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

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

Как показал Филипп выше, вы можете отправлять сообщения между ViewModels. Когда ваш ViewModel получает сообщение, он может установить свое собственное внутреннее свойство, скажем, «Showdialog», на True.

Затем вы можете иметь привязку, которая реагирует на эту операцию изменения свойства и открывает диалог.

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

Другие советы

Скажем, у вас есть родительский представление и диалог. В MVVM они оба будут иметь модель представления. Хорошо, что эти модели просмотров разъединяются, то есть у них нет ссылок друг на друга. И все же им нужно общаться друг с другом. Класс мессенджера действует как ход между или посредником, чтобы опосредовать связь информации между двумя классами. Смотрите код, взятый из Блог Джоша.

alt text

Вот объект A. Это призыв к методу регистрации посредника. Обнаружение: когда я получаю сообщение ObjectBesAidsomething, от посредника, я закрюну его в члене WhatObjectBessays.

alt text

Вот объект B, который реализует: я собираюсь отправить сообщение ObjectBesmeame. Обратите внимание, что объект B ничего не знает об объекте A. Не может быть ничего прослушивания ObjectBesAdeThing или 100 объектов, прослушивающих объект, но объект B не знает и не все равно. Это хорошая развязка, и именно поэтому узор медиатора - хорошая идея. И это способ, которым Фонд MVVM рекомендует передавать информацию между моделями View.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top