我点击该按钮打开上下文菜单,现在单击上下文菜单将被绑定到viewModel。但它没有发生。
<Button Content="Copy" Tag="{Binding LinkViewModel, RelativeSource={RelativeSource Mode=Self}}" Command="{Binding LinkCopyCommand, UpdateSourceTrigger=PropertyChanged}" >
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy Download link " Command="{Binding Path=Parent.PlacementTarget.Tag.CopyViewCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" />
<MenuItem ... />
</ContextMenu>
</Button.ContextMenu>
</Button>
我已经尝试过tag属性,但在我看来它不起作用。如果我绑定到按钮本身,viewmodel工作正常,但contextMenu dataBinding不起作用。
编辑:
现在,由于代码在讨论后正在运行,我想在此处发布。
我所做的更改是我把UpdateSourceTrigger =“Propertychanged”放在这里是代码
<Button Content="Copy" Tag="{Binding LinkViewModel, RelativeSource={RelativeSource Mode=Self}}" Command="{Binding LinkCopyCommand, UpdateSourceTrigger=PropertyChanged}" >
<Button.ContextMenu>
<ContextMenu Width="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem Header="Copy View link " Command="{Binding CopyViewCommand, UpdateSourceTrigger=PropertyChanged}" />
<MenuItem ... />
</ContextMenu>
</Button.ContextMenu>
</Button>
但是我不知道突然它是如何工作的,它必须在Button Context菜单的情况下使用tag属性。如果有人对此有所了解,我想很多像我这样的新WPF和数据绑定的人都会受益。
答案 0 :(得分:2)
我假设您在UserControl
内使用此按钮。请尝试以下代码
<Button Content="Copy" Tag="{Binding LinkViewModel, RelativeSource={RelativeSource Mode=Self}}" Command="{Binding LinkCopyCommand, UpdateSourceTrigger=PropertyChanged}" >
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy Download link " Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.CopyViewCommand}" />
<MenuItem ... />
</ContextMenu>
</Button.ContextMenu>
</Button>
答案 1 :(得分:1)
<Button Content="Copy" Command="{Binding LinkCopyCommand, UpdateSourceTrigger=PropertyChanged}" >
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy Download link " Command="{Binding Path=CopyViewCommand}" />
<MenuItem ... />
</ContextMenu>
</Button.ContextMenu>
CopyViewCommand
直接从您的DataContext
绑定...这是您的ViewModel ..
答案 2 :(得分:0)
您必须将ContextMenu的DataContext连接到ViewModel。一种方法是通过为上下文菜单设置一个Opened事件处理程序。
请在下面的链接中查看我的答案 -