WPF TreeView节点和子节点

时间:2013-12-03 06:26:44

标签: c# wpf treeview itemtemplate treeviewitem

如何修改当前的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; }
}

2 个答案:

答案 0 :(得分:1)

答案 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 ObservableCollectionTreeView.ItemsSource财产。
  • 如果您希望在更改数据时更新UI,则应在INotifyPropertyChange类中实现MessageData接口。
  • 通过将DataTemplate添加到TreeView.Resources部分而不设置x:Key属性,它将明确地设置在所有MessageData个实例中TreeView