2010-07-20 147 views
0

所以在这里我来创建一个用户控件。它包含一个从组合框下降的树形视图。绑定依赖属性

实际上,有一个控件(DropTree)从其上下文菜单下拉按钮。所以我有一个控制DropTree。

public partial class DropTree : UserControl 
{ 
    public TreeView TreeView 
    { get{return treeView;} } 

    public DropTree() 
    { InitializeComponent(); } 
} 

为了简化它,我把TreeView控件公开了,然后我有我的主要控件叫做ComboTreeView。

现在我需要它来代表的一些树视图属性,所以我定义了几个依赖属性:

public static DependencyProperty SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(ComboTreeView), new FrameworkPropertyMetadata { Inherits = true, IsNotDataBindable = false, DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }); 

    public object SelectedItem 
    { 
     get { return GetValue(SelectedItemProperty); } 
     set { SetValue(SelectedItemProperty, value); } 
    } 

,并在构造函数是:

public ComboTreeView() 
{ 
      InitializeComponent(); 
      TreeViewControl.SetBinding(TreeView.SelectedItemProperty, new Binding("SelectedItem") { Source = this, Mode = BindingMode.TwoWay }); 
} 

而这一切似乎确定,直到我运行。它崩溃说SelectedItem不能绑定到数据。我不明白?

对于ItemsSource和SelectedValue也是如此......但只有以这种方式定义的SelectedValuePath属性才能正常工作。

任何人都可以帮忙吗?或者有没有其他的方式来正确地绑定它? PS:顺便说一句,我需要在后面的代码中使用ComboTreeView的DataBinding。

回答

0

尝试在SelectedValue而不是SelectedItem上设置绑定。

0

TreeView.SelectedItem是只读属性。无论是明确还是通过绑定,您都无法设置它。为了选择TreeView中的节点,必须将TreeViewItem.IsSelected属性设置为true。