C# 如何在代码隐藏中为treeViewItems设置不同的dataTemplate

C# 如何在代码隐藏中为treeViewItems设置不同的dataTemplate,c#,wpf,C#,Wpf,我有TreeView(名为:TreeView Diagram): 我在主窗口中有3个可观察到的集合: private ObservableCollection< MyBasicData > _myBasicDataCollection = new ObservableCollection< MyBasicData >(); private ObservableCollection< MyComplexData > _myComplexDataCol

我有TreeView(名为:TreeView Diagram):

我在主窗口中有3个可观察到的集合:

  private ObservableCollection< MyBasicData >  _myBasicDataCollection = new ObservableCollection< MyBasicData >();

  private ObservableCollection< MyComplexData > _myComplexDataCollection = new ObservableCollection< MyComplexData >();

  private ObservableCollection< MyRootData > _myRootDataCollection = new ObservableCollection< MyRootData >();
private observedcollection\u myBasicDataCollection=new observedcollection();
私有ObservableCollection\u myComplexDataCollection=新ObservableCollection();
私有ObservableCollection\u myRootDataCollection=新ObservableCollection();
我如何才能做到这一点?

创建DataTemplateSelector,它迭代每个项目,并根据条件设置其DataTemplate

 class TreeViewTemplateSelector : DataTemplateSelector
{
    public DataTemplate BasicTemplate { get; set; }
    public DataTemplate ComplexTemplate { get; set; }
    public DataTemplate RootTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is MyBasicData) return BasicTemplate;
        if (item is MyComplexData) return ComplexTemplate;
        if (item is MyRootData) return RootTemplate;
        return null;
    }
}
XAML:


创建DataTemplateSelector,它迭代每个项目,并根据条件设置其DataTemplate

 class TreeViewTemplateSelector : DataTemplateSelector
{
    public DataTemplate BasicTemplate { get; set; }
    public DataTemplate ComplexTemplate { get; set; }
    public DataTemplate RootTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is MyBasicData) return BasicTemplate;
        if (item is MyComplexData) return ComplexTemplate;
        if (item is MyRootData) return RootTemplate;
        return null;
    }
}
XAML:



看这个,看这个,嗨,马克西姆斯,我已经做了。我需要解释如何在代码隐藏中做到这一点-如何为每个treeViewItem设置dataTemplate。这是我第一次使用treeView,所以我需要详细的解释。非常感谢。将ItemsSource设置为包含所有项的集合,包括根项、基本项和复杂项。嗨,Maximus,我已经这么做了。我需要解释如何在代码隐藏中做到这一点-如何为每个treeViewItem设置dataTemplate。这是我第一次使用treeView,所以我需要详细的解释。非常感谢。将ItemsSource设置为包含所有项(包括根项、基本项和复杂项)的集合。
  private ObservableCollection< MyBasicData >  _myBasicDataCollection = new ObservableCollection< MyBasicData >();

  private ObservableCollection< MyComplexData > _myComplexDataCollection = new ObservableCollection< MyComplexData >();

  private ObservableCollection< MyRootData > _myRootDataCollection = new ObservableCollection< MyRootData >();
 class TreeViewTemplateSelector : DataTemplateSelector
{
    public DataTemplate BasicTemplate { get; set; }
    public DataTemplate ComplexTemplate { get; set; }
    public DataTemplate RootTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is MyBasicData) return BasicTemplate;
        if (item is MyComplexData) return ComplexTemplate;
        if (item is MyRootData) return RootTemplate;
        return null;
    }
}
<Window x:Class="WpfApplication6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication6">
<Window.Resources>
    <DataTemplate x:Key="BasicDataTemplate">

    </DataTemplate>
    <DataTemplate x:Key="ComplexDataTemplate">

    </DataTemplate>
    <DataTemplate x:Key="RootDataTemplate">

    </DataTemplate>
    <local:TreeViewTemplateSelector x:Key="TreeViewDataTemplateSelector" BasicTemplate="{StaticResource BasicDataTemplate}"
                                    ComplexTemplate="{StaticResource ComplexDataTemplate}"
                                    RootTemplate="{StaticResource RootDataTemplate}"/>
</Window.Resources>
<TreeView ItemTemplateSelector="{StaticResource TreeViewDataTemplateSelector}"/>