WPF MVVM контролирует обмен информацией - PullRequest
0 голосов
/ 17 ноября 2009

Я изучаю WPF и MVVM и пытаюсь подчеркнуть хороший дизайн. У меня большой опыт работы с WinForms и C #. Это концептуально, поэтому я не думаю, что мне нужно размещать код.

У меня есть окно xaml, которое управляет "профилями". В левой половине пользовательский вид дерева элементов управления, связанный с ViewModel, который считывает базу данных и создает иерархию профилей. ViewModel для отдельных профилей содержит идентификатор базы данных среди прочего. Правая половина - это еще один пользовательский элемент управления с ListView и собственным ViewModel, который считывает базу данных для отдельной информации профиля.

Обе половины прекрасно работают независимо, но теперь я хочу связать выделенную область в виде дерева со списком, чтобы информация в представлении списка отражала выбор в виде дерева. Каков наилучший способ сделать это?

Древовидная модель представления дерева предоставляет идентификатор профиля, который можно использовать для поиска информации профиля в просмотре списка. Опять же, цель состоит в том, чтобы просто связать эти два вместе. Я чувствую, что у меня есть несколько вариантов:

-Модель представления дерева может вызывать статический метод в модели представления списка, который обновляет профиль.

- Вся страница может содержать модель представления, в которой есть модели представления членов для обоих компонентов.

-Я мог бы как-то "направить" известный выбранный профиль viewview модели treeviewss в элемент управления listview в файле xaml.

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

А идеи?

Спасибо!

1 Ответ

1 голос
/ 17 ноября 2009

Вы используете Prism? CAL WPF? Если это так, вы можете рассмотреть возможность использования составных событий. Это события, которые работают через ViewModels, также есть CompositeCommands.

Вы можете настроить составное событие следующим образом ...

public class ProfileSelectedEvent : CompositePresentationEvent<Profile>
{
}

Затем вы можете использовать EventAggregator для подписки и публикации составных событий. Если вы используете Prism / CAL для WPF, у вас подключен Unity, поэтому вы можете просто поместить IEventAggregator в конструктор вашей ViewModel

TreeViewViewModel(IEventAggregator eventAggregator)

Затем вы можете опубликовать и подписаться на событие через EventAggregator ...

EventAggregator.GetEvent<ProfileSelectedEvent>().Publish(profile);

Подписка очень похожа ... Я уверен, что вы поняли!

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

Andy

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