如何绑定到WPF TreeView的SelectedItem属性?

时间:2013-03-06 23:25:48

标签: mvvm treeview inotifypropertychanged selecteditem selecteditemchanged

我已经调整了TreeView Control示例项目here,以便与Entity Framework对象一起使用。它运行得很漂亮,但是像许多其他人一样,尝试更新基于SelectedItem更改的ParentViewModel上的集合或属性时,我也无法弥合理解上的差距。

我在MVVM工作,希望我的代码隐藏免于任何混乱。作为初学者,我喜欢实现PropertyChanged通知的清晰度,但由于它们没有固定的“SelectedItem”属性要绑定到TreeView,我无法像往常一样提升我的PropertyChanged事件ListBox

我的ChildViewModel上也有一个SelectedItem属性(实际上成功捕获了isSelected = true的对象)(参见H.B.对this question的回答)。我的ParentViewModel上还有一个ChildViewModel类型的SelectedItem,它绑定到我的View(参见@Martin Liversage的帖子here)。我不能让他们同步。

请帮助我了解如何将ChildViewModel的SelectedItem属性传递给我的ParentViewModel。我没有将TreeView绑定到CollectionView,因此我无法在视图集合中获取CurrentItem

我正在处理的我的viewmodel集合非常查询,所以我现在还没有包含任何代码。请让我知道清楚需要什么。

1 个答案:

答案 0 :(得分:6)

所以,至少你开始习惯你的每日MVVM-WTF ......'为什么我必须在SO上发布基本的东西'。有一天,你会喜欢MVVM,我保证;)

话虽如此:如您所知,TreeView不支持同步SelectedItem属性。但它确实存在,但它是只读的。你想要做的是扩展TreeView的行为,使它的选定项与它的ViewModel上的属性同步。

此问题说明指出了正确的方向:行为。行为(或者,确切地说,System.Windows.Interactivity.Behavior<> s)允许您扩展任何DependencyObject的功能。 (Good introduction

通过行为将TreeView与所选项目同步的方法可以在这里找到:

SO Thread

这应该已经为你做了。您只需复制并粘贴 Steve GreatRex 的代码即可。如果您需要有关该方法的帮助,请发表评论。玩得开心!