2011-08-23 70 views
0

的财产我有这样的绑定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?

+0

设计方面你的模型不应该在UI的任何引用的。 –

回答

0

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

因此,设置一个ItemTreeNode公共属性来将SelectedItem绑定到。然后,在你的树的SelectedItemChanged情况下,通过使用ItemContainerGenerator.ContainerFromItem方法,这种抢树型视图:

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