2014-10-13 2 views
0

Я получаю все в рассоле с TreeViews и User Controls; Я довольно новичок в WPF, поэтому извиняюсь заранее.WPF TreeView Selected Item и показ элементов управления пользователя

Синопсис

У меня есть коллекция классов VM для моих TreeView предметов. Таким образом, TreeView привязан к коллекции экземпляров [родительского] VM, каждый из которых имеет коллекцию [Child] ren, и каждый [Child] имеет другие данные и другие коллекции (которые я вам не буду с вами).

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

Итак, если выбранный элемент TreeView имеет тип '[Child]', тогда элемент управления пользователя должен быть видимым.

Проблема

Я изо всех сил с тем, как определить, когда выбран элемент в TreeView, так что я могу показать/скрыть элемент управления пользователя.

Один из способов, которым я думал, но не нравится, - привязать свойство IsSelected к TreeViewItem к классу VM [Child], а затем поднять событие до главной виртуальной машины, , которая будет отображать/скрывать UC через DP. Но для этого требуется целая загрузка событий и т. Д., И для меня, кажется, беспорядочно.

Резюме

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

Все, что я хочу сделать, это выбрать элемент в TreeView и соответствующие дисплеи UserControl с соответствующими данными TreeViewItem, которые я мог бы в Windows Forms очень легко, но, очевидно, я не думаю об этом в очень WPF'ish путь на данный момент.

Любые ссылки на статьи и т. Д.

Большой размер груди для любых ответов.

ответ

2

В вашем случае я бы предпочел DataTemplateSelector. Это объект, который предоставляет способ выбора DataTemplate на основе объекта привязки данных - здесь ваш ViewModel.

Просто поместите ContentControl в свое окно и привяжите Content-Property к выбранному элементу-свойству TreeView. Задайте ContentTemplateSelector-Property ContentControl ссылку на свой собственный селектор DataTemplate.

DataTemplateSelector будет выбирать правильный DataTemplate с определенным UserControl по вашим требованиям.

<DataTemplate x:key="VMParent"> 
     <local:ParentUI DataContext="{Binding}" /> 
    </DataTemplate/> 

    <DataTemplate x:key="VMChild"> 
     <local:ChildUI DataContext="{Binding}" /> 
    </DataTemplate/> 

Привет :)

+0

Оооо! Удивительно, я не сталкивался с этим раньше - мне это нравится! – JustAPleb

+0

Могу ли я добавить, что я пробовал это, и это работает как шарм, я также нашел эту ссылку полезной, если другие находятся в аналогичной позиции: http://tech.pro/tutorial/807/wpf-tutorial-how -в потребительной а-datatemplateselector. – JustAPleb

Смежные вопросы