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