我正在尝试使用HierarchicalDataTemplate显示混合类型的树视图,但到目前为止我的所有尝试都失败了..
我有一个类似树的类,可以有两种不同类型的孩子。 (位置和设备)。为了让事情可以理解,我想要展示的是:
->Location 1
|
|--->Device 1.1
|--->Device 1.2
|--->Location 1.2
|
|---->Device 1.2.1
|---->Location 1.2.1
.....etc.....
我尝试过很多我找到的解决方案,但都没有效果。在大多数情况下,我只是在树视图中获取类名。 我正在尝试使用HierarchicalDataTemplate做什么?如果是,请告诉我如何。
答案 0 :(得分:5)
经过几个小时的反复试验后,我回到了开始并找到了解决方案。我无法相信它实际上是如此简单。
模板如下所示:
<HierarchicalDataTemplate x:Key="NavigatorDataTemplate" DataType="{x:Type local:Location}" ItemsSource="{Binding Locations}">
<StackPanel>
<TextBlock Text="{Binding Description}"/>
<ListBox ItemsSource="{Binding Devices}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</HierarchicalDataTemplate>
TreeView就是这样:
<TreeView Name="treeNav" ItemTemplate="{StaticResource NavigatorDataTemplate}"/>
由于需要显示的集合已在代码中,我只需将其设置为ItemsSource:
treeNav.ItemsSource = locations;
答案 1 :(得分:1)
HierarchicalDataTemplate应该有助于解决您的问题。查看MSDN Data Templating Overview
上的最新示例答案 2 :(得分:1)
要使此层次结构工作Location
,对象应具有composite collection of Locations and Devices
,您只需将该集合设置为HierarchicalDataTemplate的ItemsSource即可。这个样本应该起作用 -
<HierarchicalDataTemplate DataType="{x:Type local:Location}"
ItemsSource="{Binding CompositeCollection}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:Device}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
我假设您需要在UI上显示的每个对象位置和设备中都有Name属性。将这些数据模板添加到ItemsControl的资源中,这些资源可能是ListBox,TreeView或任何其他ItemsControl。
答案 3 :(得分:0)
作为WPF的新手,我最近解决了同样的问题。我使用的方法是创建一个新类,用于在树中显示数据。
TreeDisplayItem类具有将显示的每个类类型的承包商。 在每个构造函数中,将为传递的类设置_display属性。
itemDef =类别名称
ItemPrice =价格+数量+商店位置
public class TreeDisplayItem
{
readonly string _display;
readonly string _id;
readonly List<TreeDisplayItem> _items;
public LegoPriceDisplay(ItemDef itemDef, List<TreeDisplayItem> items)
{
...//Root node class type ItemDef
}
public LegoPriceDisplay(ItemPrice price)
{
....//child node type = ItemPrice
}
public List<TreeDisplayItem> Items{ get; private set; }
public string DisplayId
{
get { return _id; }
}
public string Display
{
get { return _display; }
}
}
在WPF页面XAML中,使用嵌套的HierarchicalDataTemplates定义树视图。 当然,这仅适用于您具有固定/已知树项深度的用例。 在我的例子中,treeview将向下钻取两层(计算根)
<TreeView Margin="0" Name="TvStorePrices" ItemsSource="{Binding TreeDisplayItemList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="local:TreeDisplayItem" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Display}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate DataType="local:TreeDisplayItem" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Display}" />
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>