我看起来又高又低,在这里砸了太久。使用MVVM,Caliburn Micro,WPF,XAML,并尝试将数据延迟绑定到节点。我有数据绑定第一级或第二级,我想在节点上观察“Expanded”事件,这样我就可以检查我的小后期获取子节点,也许还可以获取数据并增长树。我已经尝试了很多东西,我想我现在已经确定了我应该能够做的事情。
Message.Attach="[Event TreeViewItem.Expanded] = [Action NodeExpanding($this)]"
但这并不会激发......在同一级别,以下工作正常:
Message.Attach="[Event SelectedItemChanged] = [Action SetSelectedItem($this.SelectedItem)]"
我确实让这个事件在我的ViewModel上得到了很好的解决,所以我必须要关闭......
任何帮助表示赞赏! tnx,-J
答案 0 :(得分:0)
我的猜测(可能很接近)是它可能与节点的DataContext
有关。默认情况下,CM使用DataContext
作为操作的目标,因此,如果没有明确设置上下文,您将尝试针对绑定到节点的数据项触发事件,当然数据项不会有办法解决这个问题。
您仍然可以通过在树视图项目上设置Action.TargetWithoutContext
附加属性来设置操作的目标 - 这样CM知道在哪里查找连接消息
通常我发现绑定祖先是最简单的:
<TreeViewItem cal:Action.TargetWithoutContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}" />
或者您可以使用ElementName
,无论对您有用,只需记住您需要指向目标ViewModel,它将是父容器的DataContext
。我忘记了几次使用DataContext
并且摸不着为什么它不起作用(你没有绑定错误,因为你的绑定仍然有效,但它只是不起作用 - CM LogManager.GetLog ()帮助到这里!)