我有一个TreeView,旨在操作两个级别。为此,我有两个HierarchicalDataTemplate和两个自定义类型。ItemsSource链接到ObservableCollection,一切正常。我只是不知道如何从codebehind使节点选定或展开。有人提出了一个非常好的想法,将IsExpanded和IsSelected属性绑定到我的自定义类型中相应的属性。唯一的问题是,HierarchicalDataTemplate没有直接实现TreeViewItem,那么我怎样才能在以下代码中访问这些属性呢?
<TreeView Name="treeViewNotes" AllowDrop="True" PreviewMouseLeftButtonDown="treeViewNotes_PreviewMouseLeftButtonDown" PreviewMouseMove="treeViewNotes_PreviewMouseMove" Drop="treeViewNotes_Drop" DragEnter="treeViewNotes_DragEnter">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type dataclasses:NoteFolder}" ItemsSource="{Binding Notes}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding TreeViewIcon}" Tag="{Binding Self}"/>
<TextBlock Text="{Binding Title}" Tag="{Binding Self}" Margin="3"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type dataclasses:Note}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding TreeViewIcon}" Tag="{Binding Self}"/>
<TextBlock Text="{Binding Title}" Tag="{Binding Self}" Margin="3"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
我希望在创建并添加新的Note
到某个NoteFolder
时,能够选择此Note
并展开Folder
。在拖放操作上,同样需要进一步改善UI响应。
INotifyPropertyChanged
。 - mandarin