如何将属性绑定到TreeView

时间:2013-06-13 17:33:00

标签: wpf mvvm

我想在我的treeview和datagrid之间创建一个关系  我有一个名为SelectedTestElement的方法,它调用SearchGrid方法

视图模型:

     public TestElementViewModel SelectedTestElement
    {
        set
        {
            if (_selectedTestElement == value) return;
            this._ selectedTestElement = value;


            SearchGrid(value.Id, new List< TestElementViewModel>( testElementViewModel.GetAllTreeNodes()));

        }
        get
        {
            return this._ selectedTestElement;
        }

    }

我想在我的xaml TreeView

中绑定此属性
   <TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding MessageElements,  Mode=TwoWay}" TreeViewItem.Selected="{Binding SelectedTestElement, Mode=TwoWay}" />

treeView.Selected是在树视图中进行属性调用的最佳方法吗?

编辑:

视图模型:

我选择了一个treenode,即SelectedTreeNode将绑定到TreeView.SelectedItem

      public TreeNodeViewModel SelectedTreeNode
     {
        set
        {
            if (_selectedTreeNode== value) return;
            this._selectedTreeNode = value;

            //search the treenode id
            SearchGrid(value.Id, TestFieldVModel.GetAllTestField());

        }
        get
        {
            return this._selectedTreeNode;
        }

    }

//执行搜索并突出显示匹配的ID网格

       public void SearchGrid(int id, ObservableCollection<TestFieldViewModel> msgField)
     {
        foreach (var c in msgField)
        {
            c.DisplayColor = c.Id == id ? Brushes.DarkOrange : Brushes.Black;
            c.DisplayFont = c.Id == id ? FontWeights.Bold : FontWeights.Normal;

          // SearchGrid(id, c.GetAllTestField());
        }
    }

XAML:

      <TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding TreeNodes,  Mode=TwoWay}" TreeView.SelectedItem ="{Binding Path= SelectedTreeNode, Mode=TwoWay}" >

1 个答案:

答案 0 :(得分:0)

这不起作用,您尝试将事件绑定到视图模型上的属性。

我建议您使用TreeView.SelectedItem属性并将其绑定到视图模型上接受TreeViewItem的新属性。然后修改您的SelectedTestElement属性以查看新选择的项属性并确定要返回的相应TestElementViewModel,或者您可以将新选中的项属性的set设置为`this ._selectedTestElement'直接。