【问题标题】:How to bind to SelectedItem property of WPF TreeView?如何绑定到 WPF TreeView 的 SelectedItem 属性?
【发布时间】:2013-02-22 00:03:02
【问题描述】:

我已调整 TreeView 控件示例项目 here 以用于实体框架对象。它工作得很好,但就像许多其他人试图根据 SelectedItem 更改更新其 ParentViewModels 上的集合或属性一样,我也无法弥合理解的鸿沟。

我在 MVVM 中工作,并且希望我的代码隐藏没有任何混乱。作为一个初学者,我喜欢实现PropertyChanged 通知的简洁性,但由于它们没有绑定到TreeView 上的固有“SelectedItem”属性,因此我无法像通常使用ListBox 那样引发我的PropertyChanged 事件。

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

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

我正在处理的视图模型集合的查询量很大,所以我现在没有包含任何代码。请让我知道需要什么才能清楚。

【问题讨论】:

    标签: mvvm treeview inotifypropertychanged selecteditem selecteditemchanged


    【解决方案1】:

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

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

    此问题描述为您指明了正确的方向:行为。行为(或者,准确地说,System.Windows.Interactivity.Behaviors)允许您扩展任何DependencyObject 的功能。 (Good introduction)

    可以在此处找到通过行为将 TreeView 与选定项目同步的方法:

    SO Thread

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

    【讨论】:

    • 谢谢 :) 抱歉花了这么长时间。正在辨别这个问题和我遇到的另一个理解问题。
    • 没问题,希望对您有帮助!
    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 2014-12-08
    • 2010-09-19
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多