在按钮单击上下文菜单如何绑定到viewModel?

时间:2014-02-06 06:22:59

标签: c# wpf data-binding mvvm contextmenu

我点击该按钮打开上下文菜单,现在单击上下文菜单将被绑定到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和数据绑定的人都会受益。

3 个答案:

答案 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事件处理程序。

请在下面的链接中查看我的答案 -

Context Menu items command binding WPF using MVVM