将TreeViewItem绑定到对象的属性

时间:2011-08-23 13:09:57

标签: c# wpf xaml data-binding

我有一个带有这种绑定的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?

1 个答案:

答案 0 :(得分:0)

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

因此,设置ItemTreeNode公共属性以将SelectedItem绑定到。然后,在树的SelectedItemChanged事件中,使用ItemContainerGenerator.ContainerFromItem方法获取TreeViewItem:

var tvi = myTreeView.ItemContainerGenerator.ContainerFromItem(selectedItem) as TreeViewItem;