WPF Caliburn Micro TreeView HierarchicalDataTemplate 节点扩展事件

Posted

技术标签:

【中文标题】WPF Caliburn Micro TreeView HierarchicalDataTemplate 节点扩展事件【英文标题】:WPF Caliburn Micro TreeView HierarchicalDataTemplate Node Expanded Event 【发布时间】:2013-03-22 03:21:46 【问题描述】:

我高高在上,在这儿砸头太久了。使用 MVVM、Caliburn Micro、WPF、XAML,并尝试将数据后期绑定到节点。我已经对第一级或第二级进行了数据绑定,并且我想观察节点上的“扩展”事件,这样我就可以检查我的小延迟获取子节点,也许可以获取数据并增长树。我已经尝试了很多事情,我想我现在已经准备好了,我应该能够基本上做到..

Message.Attach="[Event TreeViewItem.Expanded] = [Action NodeExpanding($this)]"

但这永远不会触发......在同一级别,以下工作正常:

Message.Attach="[Event SelectedItemChanged] = [Action SetSelectedItem($this.SelectedItem)]" 

而且我确实让这个事件在我的 ViewModel 上很好地触发了,所以我必须接近......

任何帮助表示赞赏! tnx, -J

【问题讨论】:

【参考方案1】:

我的猜测(可能很接近)是它可能与节点的DataContext 有关。 CM 默认使用DataContext 作为操作的目标,因此在没有明确设置上下文的情况下,您会尝试针对绑定到节点的数据项触发事件,当然数据项没有任何处理这个问题的方法。

您仍然可以通过在树视图项上设置 Action.TargetWithoutContext 附加属性来设置操作目标 - 这样 CM 就知道在哪里查找连接消息

通常我发现绑定到祖先是最简单的:

<TreeViewItem
    cal:Action.TargetWithoutContext="
        Binding DataContext,
        RelativeSource=RelativeSource AncestorType=UserControl" />

或者你也可以使用ElementName,只要记住你需要指向目标ViewModel,这将是父容器的DataContext。我曾多次忘记使用DataContext,并为它为什么不起作用而挠头(您没有遇到绑定错误,因为您的绑定仍然有效但它只是不起作用 - CM LogManager.GetLog()在这里有帮助!)

【讨论】:

谢谢@Charleh Action.TargetEithoutContext 似乎很有希望!明天我会试一试,让你知道我的结局。 -J @James 你有没有解决这个问题?我无法让它工作

以上是关于WPF Caliburn Micro TreeView HierarchicalDataTemplate 节点扩展事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Caliburn.Micro 的单实例 WPF 应用程序

使用 WPF 和 Caliburn.Micro 在视图中添加多个视图

C# WPF MVVM开发框架Caliburn.Micro入门介绍①

使用 Caliburn.Micro 4.0.x 和 WPF 的对话框

C# WPF MVVM开发框架Caliburn.Micro快速搭建③

从Caliburn.Micro,WPF,MVVM中的另一个窗口获取信息