Открытие вкладки с данными узла дерева - PullRequest
0 голосов
/ 15 сентября 2011

Привет,
Я новичок в Prism и WPF, и у меня есть вопрос относительно обмена данными между представлениями.Приложение, над которым я работаю, напоминает SQL Server Development Studio.Демо содержит два региона.Первый регион содержит дерево (как Object explorer в SQL Server DS).Узлы дерева связаны с различными моделями представления.Примером может служить DatabaseA-> Tables-> dbo.TableA-> Columns и т. Д.

Второй регион изначально пуст.Когда я дважды щелкаю на узле дерева, я хотел бы открыть представление, в котором отображаются данные, которые я щелкнул в дереве.
Подробно:
1. Двойной щелчок на узле дерева
2. Данные узла и отображение их во втором регионе.
3. если вторая область не пуста, проверьте, отображаются ли данные об выбранном узле на одной из существующих вкладок
4. если нет, создайте новую вкладку с данными об выбранном узле, в противном случае сфокусируйте существующую вкладку

До сих пор мне удавалось создать дерево.При щелчке узла дерева вызывается приложение:

UriQuery uriQuery = new UriQuery {{"ID", unit.Id.ToString()}};  
uriQuery.Add("TypeName", "Unit");  
var uri = new Uri("DebugTreeItemView" + uriQuery, UriKind.Relative);  
RegionManager.RequestNavigate("SECOND_REGION", uri);  

Откроется представление с управлением вкладками, и я смогу получить параметры URI.Но я не удовлетворен этим решением.Мне нужен способ:
1. перехватить этот вызов RegionManager.RequestNavigate, чтобы проверить, создан ли уже элемент управления вкладками.Кроме того, мне нужно проверить, что данные по выбранному узлу еще не отображаются на одной из существующих вкладок.
2. Я хотел бы отправить объект Unit непосредственно в представление управления вкладками вместо отправки ID и typename.Каков наилучший способ достичь этого?

Спасибо.

1 Ответ

0 голосов
/ 15 сентября 2011

У меня будет ShellViewModel, управляющий моим общим приложением. Он будет содержать коллекцию TreeNode для левой стороны и коллекцию OpenTabs для правой стороны. Он также будет содержать SelectedTabIndex для правой стороны и, возможно, SelectedTreeNode для левой стороны, если это будет иметь смысл.

Когда вы хотите открыть новую вкладку, я бы использовал EventAggregator, чтобы опубликовать событие OpenTab и передать ему выбранный элемент TreeNode. ShellViewModel подпишется на эти события и определит, существует ли этот объект в коллекции OpenTabs. Если он существует, он просто устанавливает SelectedTabIndex. Если нет, он добавляет элемент в коллекцию OpenTabs перед установкой SelectedTabIndex

Некоторое время назад я опубликовал что-то здесь по этому виду навигации с MVVM, если вам интересно

...