将TreeViewItem绑定到对象的属性

本文关键字:属性 对象 TreeViewItem 绑定 | 更新日期: 2023-09-27 18:06:21

我有一个带有这样绑定的TreeView控件:

<TreeView ItemsSource="{Binding}">
<TreeView.Resources>
  <HierarchicalDataTemplate DataType="{x:Type Trees:ItemTreeNode}"
                            ItemsSource="{Binding Path=Children}">
    <StackPanel Orientation="Horizontal" Tag="">
      <Image VerticalAlignment="Center" Margin="0,0,4,0" Source="{Binding Path=Icon}" />
      <TextBlock VerticalAlignment="Center" Text="{Binding Path=Text}" />
    </StackPanel>
  </HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>

下一节课:

public class ItemTreeNode : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<ItemTreeNode> Children { get; set; }
    public ImageSource Icon {get; set;}
    public string Text {get; set;}
    public TreeViewItem VisualItem { get; set; }
}

是否有可能绑定一个TreeViewItem引用到VisualItem,所以我可以通过VisualItem寻址得到TreeViewItem ?

将TreeViewItem绑定到对象的属性

你可以尝试,但你会收到一个绑定错误,因为TreeView项目是你的ItemsSourceCollection类型而不是TreeViewItem类型。

所以设置一个ItemTreeNode公共属性来绑定SelectedItem。然后,在树的SelectedItemChanged事件中,使用ItemContainerGenerator获取TreeViewItem。ContainerFromItem方法如下:

var tvi = myTreeView.ItemContainerGenerator.ContainerFromItem(selectedItem) as TreeViewItem;
相关文章: