如何修改当前的TreeView以支持“Critical,Alert”的父节点,然后子节点将成为该严重性类型的消息。我正在使用与TreeView绑定的ObservableCollection。每种消息类型中都有更多数据,但我只希望其中一些数据对用户可见。然后,当用户单击其中一个子节点时,从集合中的该项中提取其他数据并将其显示在需要的位置。我将ID添加为隐藏,因为我不确定是否需要引用的内容,这对于引用该集合中的项目是唯一的。我还想为每个父节点默认一个不同的图标,子节点没有图标。
希望我这样描述,这是可以理解的。
XMAL
<TreeView x:Name="tvMessages" HorizontalAlignment="Left" Height="262" Margin="10,37,0,0" VerticalAlignment="Top" Width="248">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Icon}" />
<TextBlock Text="{Binding Description}" />
<TextBlock Text="{Binding ID}" Visibility="Hidden" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
MessageData
public class MessageData
{
public Guid ID { get; set; }
public string Severity { get; set; }
public string Description { get; set; }
public string ClientID { get; set; }
public string Specialty { get; set; }
public DateTime IssuedDate { get; set; }
}
答案 0 :(得分:1)
它有点旧,但是这个MSDN博客应该让你朝着正确的方向http://blogs.msdn.com/b/mikehillberg/archive/2009/10/30/treeview-and-hierarchicaldatatemplate-step-by-step.aspx
答案 1 :(得分:1)
要显示分层数据......您需要拥有分层数据。最简单的方法是将MessageData
类型的集合(对于子节点)添加到MessageData
类中:
public class MessageData
{
public Guid ID { get; set; }
public string Severity { get; set; }
public string Description { get; set; }
public string ClientID { get; set; }
public string Specialty { get; set; }
public DateTime IssuedDate { get; set; }
public ObservableCollection<MessageData> Messages { get; set; }
}
XAML所需的更改也很小:
<TreeView x:Name="tvMessages" ItemsSource="{Binding YourMessageDataObservableCollection}" HorizontalAlignment="Left" Height="262" Margin="10,37,0,0" VerticalAlignment="Top" Width="248">
<TreeView.Resources>
<DataTemplate DataType="{x:Type YourxmlNamespacePrefix:MessageData}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Icon}" />
<TextBlock Text="{Binding Description}" />
<TextBlock Text="{Binding ID}" Visibility="Hidden" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Messages}" />
</TreeView.ItemTemplate>
</TreeView>
注意事项:
Binding
ObservableCollection
到TreeView.ItemsSource
财产。 INotifyPropertyChange
类中实现MessageData
接口。 DataTemplate
添加到TreeView.Resources
部分而不设置x:Key
属性,它将明确地设置在所有MessageData
个实例中TreeView
。