English 中文(简体)
你如何在Silverlight Treeview中禁用一个节点?
原标题:
  • 时间:2009-02-09 16:30:52
  •  标签:

在Silverlight Toolkit中,将TreeView绑定到数据源时,如何访问TreeViewItem本身以使用其IsEnabled属性?还是说我们会失去该功能,需要使用任何自定义的hierarchicaldatatemplate来支持它?

如果我正在将数据绑定到自定义对象的树形结构,如何访问单个TreeViewItem来设置IsEnabled?理想情况下,我希望通过数据绑定实现这一目标。我在想,是否可以使用ItemContainerStyle来解决这个问题?我觉得我有点困惑ItemContainerStyle、ItemTemplate等之间的关系。显然,当我们将数据绑定到普通对象时,TreeViewItem会为我们创建,但我们如何使用绑定设置其属性,特别是绑定方面呢?

问题回答

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

各种项目控件(包括TreeView)允许您覆盖项目的创建方式,例如ListBoxItem、TreeViewItem等。您可以在代码中为这些项目的属性设置绑定。

Public Class MyTreeView Inherits 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/上的ComboBox示例。





相关问题
热门标签