【发布时间】:2016-11-08 23:25:44
【问题描述】:
我的视图中有 ListView 控件,它有自己的视图模型 A。我制作了一个单独的 UserControl 用作 ListViewItem,因为它的样式占用了大量空间。在这个 ListViewItem 中,我有一个按钮,它绑定到 viewmodel A 并且工作正常。
由于上下文菜单有它自己的可视化树并且不能通过祖先绑定,我使用binding proxy 来解决这个问题。我对其进行了一些调整,使其适用于我的特定情况,因为如果它只使用 {Binding} 它将绑定到项目的模型,而不是列表视图的视图模型。
<helpers:BindingProxy x:Key="proxy" Data="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}"/>
为了检查绑定是否正确,我使用转换器作为一种方法,只是为了有一个断点来检查源代码。一切都很好,我的视图模型就在那里。
现在,当我尝试在上下文菜单中绑定到 this 时
<UserControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Open"
Command="{Binding DataContext.OpenChatCommand, Source={StaticResource proxy}, Converter={StaticResource DataBindingDebugConverter}}"
CommandParameter="{Binding}"/>
</ContextMenu>
</UserControl.ContextMenu>
该命令永远不会被调用。我添加了转换器以查看是否有问题,但事实证明,我从来没有使用过我的转换器,这反过来意味着这段代码永远不会被执行。
欢迎任何对为什么会发生这种情况以及如何解决此问题有任何想法的人。
我认为是编译器出现故障
【问题讨论】:
标签: c# wpf mvvm contextmenu