根据选定的TreeViewItem切换视图

时间:2011-04-21 08:04:29

标签: wpf treeview treeviewitem

我有一个Shell.xaml文件,其中包含另外两个UserControl。左边是我的TreeView,右边是详细信息屏幕。

我希望详细信息屏幕可以根据选定的TreeViewItem进行切换。我知道这可以通过使用DataTemplates来实现,因为我已经通过简单的按钮单击并使用<ContentControl Content="{Binding CurrentDetailViewModel}">标记来完成此操作,但我不知道如何基于选定的TreeViewItem完成此操作。我的UserControl也有一个单独的ViewModel类,它保存我的TreeView,并为每个细节屏幕分别保存。

我一直在使用Josh Smith的TreeViews教程:http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

所以我也使用他的TreeViewItemViewModel.cs类。

有人可以对此有所了解吗?

谢谢,

捐赠

1 个答案:

答案 0 :(得分:0)

如果树视图和细节都显示相同的对象(即树视图的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>