шаблон команды wpf - PullRequest
       0

шаблон команды wpf

1 голос
/ 15 апреля 2010

У меня есть графический интерфейс wpf, который отображает список информации в отдельном окне и в отдельном потоке от основного приложения. Когда пользователь выполняет действия в главном окне, боковое окно обновляется. (Например, если вы щелкнете страницу вниз в главном окне, список в боковом окне будет перелистывать страницу вниз.)

Сейчас архитектура этого приложения выглядит очень грязной, и я уверен, что есть более чистый способ сделать это. Это выглядит так:

Главное окно содержит одноэлементный SideWindowControl, который взаимодействует с экземпляром SideWindowDisplay с помощью событий - так, например, кнопка pagedown будет работать так:

1) обработчик события кнопки в главном окне вызывает SideWindowControl.PageDown ()

2) в функции PageDown () создается и генерируется событие.

3) наконец, графический интерфейс, ShowSideWindowDisplay подписывается на событие SideWindowControl.Actions, обрабатывает событие и фактически прокручивает список вниз - обратите внимание, поскольку он находится в другом потоке, он должен сделать это, выполнив команду через Dispatcher.Invoke ( )

Это только кажется очень грязным путем, и должен быть более ясный путь (единственная часть, которая не может измениться, - это то, что главное окно и боковое окно должны быть в разных потоках). Возможно, с помощью команд WPF?

Буду очень признателен за любые предложения !! Спасибо

1 Ответ

1 голос
/ 19 апреля 2010

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

Идея будет примерно такой:

  1. Главное окно выполняет действие
  2. Действие запускает команду во ViewModel
  3. Командный метод отправляет сообщение в Messenger
  4. Боковое окно ViewModel подписывается на него
  5. Событие запускается в боковом окне ВМ, когда приходит сообщение; боковое окно действует соответственно.

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

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