Шаблон / методология для связи между Windows и / или UserControls - PullRequest
3 голосов
/ 14 июля 2010

В настоящее время я разрабатываю приложение, в котором у меня будет открыто несколько окон с использованием C # и WPF.

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

Например, окно, назовем его «Окно иерархии», может отображать иерархию стран, провинций и городов мира.Кроме этого, есть несколько других окон, в которых может отображаться провинция или город, например ИЛИ , позволяющие создать провинцию или город.В случае создания нового города, что является наилучшим способом для моего «Окна города» общаться с моим «Окном иерархии» относительно добавления города или удаления города?Окно »может даже не открыться при создании города.В этот момент нет необходимости в ответе / действии.

Ответы [ 4 ]

1 голос
/ 14 июля 2010

Есть два общих подхода к этому:

  1. Использование инъекции зависимостей для внедрения общей службы.
  2. Используйте посланника какой-либо формы.

Второй вариант становится очень популярным среди WPF и Silverlight. Многие распространенные наборы инструментов, такие как MVVM Light (подробности см. В описании класса Messenger ), используют этот подход.

0 голосов
/ 15 июля 2010

Для меня это звучит так, как будто вам нужно реализовать шаблон Model-View-Presenter.См. MVP на MSDN .

0 голосов
/ 15 июля 2010

Вы можете проверить структуру PRISM (в WinForms это был CAB - составной блок приложений).Это часть Microsoft Patterns & Practices.
Вы можете использовать публикацию событий и подписку, чтобы общаться между объектами очень простым и понятным способом:

//publish:
 eventAggregator.GetEvent<ItemAddedEvent>().Publish(MyItem);

//subscribe:
eventAggregator.GetEvent<ItemAddedEvent>().Subscribe(MyMethod);

Я еще не использовал его достаточно тщательно, но они предоставляют много документации и множество функций для поддержки DI, команд и проверки.Стоит проверить!

0 голосов
/ 14 июля 2010

Просто добавляю к тому, что Рид написал выше:

Когда я реализовал это (в моем случае, используя MVVM), я имел тенденцию сначала использовать шаблон Messenger / Mediator для запуска и запуска, а затем реорганизовать его для использования Dependency Injection.

Для хорошего примера шаблона Mediator взгляните на фреймворк Sasha Barbers под названием Cinch (теперь я думаю о V2). Вы можете скачать весь код souce и посмотреть, как он использовал Посредник - это очень хороший пример. Вы также можете взглянуть на проект Microsoft Dev Lab на Reactive Extensions для .NET, который реализует IObservable и IObserver - не имеет прямого отношения к вашему вопросу, но очень классный способ сделать обмен сообщениями.

Для внедрения зависимостей взгляните на Блок приложений Microsoft Unity k stuff

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...