2009-02-09 91 views
1

将Silverlight Toolkit中的Treeview数据绑定到数据源时,如何访问TreeViewItem本身以使用其IsEnabled属性?或者我们是否失去了这种功能,需要使用任何自定义的hierarchicaldatatemplate来支持它?如何在Silverlight TreeView中禁用节点?

如果我将数据绑定到自定义对象的树上,那么如何访问单个TreeViewItem来设置IsEnabled?理想情况下,我想通过数据绑定来做到这一点。我想知道是否使用ItemContainerStyle会工作?我想我对ItemContainerStyle,ItemTemplate等之间的关系有点困惑。当我们绑定到普通的旧对象时,TreeViewItem是为我们创建的,但是我们如何设置它的属性,特别是绑定?

回答

3

真正的问题是无法为使用XAML为每个数据绑定对象自动创建的TreeViewItem设置绑定。

包括TreeView在内的各种ItemsControl让您可以重写该项目的创建,例如ListBoxItem,TreeViewItem等。您可以在代码中为这些项目的属性设置绑定。

公共类MyTreeView 继承的TreeView

Protected Overrides Sub PrepareContainerForItemOverride(ByVal element As System.Windows.DependencyObject, ByVal item As Object) 

    MyBase.PrepareContainerForItemOverride(element, item) 

    Dim tvi As TreeViewItem = element 
    Dim bindIsEnabled As New Binding("IsEnabled") 
    bindIsEnabled.Mode = BindingMode.OneWay 
    tvi.SetBinding(TreeViewItem.IsEnabledProperty, bindIsEnabled) 

End Sub 

幸得组合框例如在http://www.fret1.com/blog/silverlight-data-binding-enableddisabled-items-on-combobox/