Переключить вид на основе выбранного TreeViewItem - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть файл Shell.xaml, который содержит два других элемента UserControls. Слева мой TreeView, а справа подробный экран.

Я хочу, чтобы подробный экран можно было переключать на основе выбранного TreeViewItem. Я знаю, что это может быть достигнуто с помощью DataTemplates, потому что я сделал это с помощью простых нажатий кнопок и с помощью тега <ContentControl Content="{Binding CurrentDetailViewModel}">, чтобы выполнить это, но я не знаю, как сделать это на основе выбранного TreeViewItem. У меня также есть отдельный класс ViewModel для моего UserControl, который содержит мой TreeView и отдельный экран для каждой детализации.

Я использовал учебник Джоша Смита по TreeViews: http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

Поэтому я также использую его класс TreeViewItemViewModel.cs.

Может ли кто-нибудь пролить свет на это?

Спасибо

Грант

1 Ответ

0 голосов
/ 21 апреля 2011

Если как древовидная структура, так и детали отображают один и тот же объект (т. Е. ItemsSource древовидной структуры содержит объекты, которые вы хотите поместить в шаблон данных в пользовательском элементе управления), то вы должны иметь возможность установить свойство в базовом ViewModel, которое оба элемента управления совместно используют пользовательский элемент управления, отображающий что-то соответствующее шаблонам данных.

например, во ViewModel:

object TreeViewSelectedItem
{
    get{ return _treeViewSelectedItem;}
    set {_treeViewSelectedItem = value; NotifyPropertyChanged("TreeViewSelectedItem");}
}

Treeview xaml

<TreeView ... SelectedItem={Binding TreeViewSelectedItem Mode=OneWayToSource}".../>

пользовательский элемент управления xaml

<UserControl>
    <Control.Resources>
        <DataTemplate DataType="{x:Type Plane}">
        ....
        </DataTemplate> 
        <DataTemplate DataType="{x:Type Train}">
        ....
        </DataTemplate>
        <DataTemplate DataType="{x:Type Automobile}">
        ....
        </DataTemplate>
    </Control.Resources>

    <ContentControl Content={Binding TreeViewSelectedItem}"/>
</Usercontrol>
...