Использование MVVM Foundation Messenger для отображения диалогового окна

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

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


person senfo    schedule 24.11.2009    source источник


Ответы (2)


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

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

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

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

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

person Brad Cunningham    schedule 24.11.2009
comment
Ууууууууууууу ... теперь в этом гораздо больше смысла. MyViewModel отправляет сообщение в AboutViewModel, а AboutViewModel открывает диалоговое окно «О программе». Это определенно проясняет мое замешательство. Большое Вам спасибо. - person senfo; 25.11.2009

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

alt text

Вот объект A. Он реализует вызов метода Register посредника: когда я получаю сообщение ObjectBSaidSomething от посредника, я кэширую его в элементе WhatObjectBSays.

alt text

Вот объект B, который реализует: Я собираюсь отправить сообщение ObjectBSaidSomething. Обратите внимание, что объект B ничего не знает об объекте A. Может быть, ничего не слушает ObjectBSaidSomething, или 100 объектов слушают ObjectBSaidSomething, но объект B не знает и не заботится. Это хорошая развязка, и поэтому хорошей идеей является паттерн Посредник. Таким образом, фонд MVVM рекомендует передавать информацию между моделями представления.

person Phillip Ngan    schedule 24.11.2009