WPF上下文菜单不会绑定到VIewModel属性

时间:2017-06-30 18:03:16

标签: c# wpf binding contextmenu

我遇到了一个我无法弄清楚的WPF绑定问题。我有一个ContextMenu模板,其格式如下所示:

<ContextMenu x:Key="CopyPasteContextMenu">
    <MenuItem Header="AlternateDelete"
              Command="{Binding Path=PlacementTarget.Tag.DataContext.AlternateDeleteCommand, 
              RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
</ContextMenu>

在DataTemplat中使用了上下文菜单,并且Border上的Tag的绑定正确地找到了PropertyEditorView,我无法从边框到上下文菜单。

<DataTemplate x:Key="PropertyValueCellViewingTemplate" DataType="viewModels:IConfigurationItemViewModel">
    <Border x:Name="ValueCellBorder"
           Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type views:PropertyEditorView}}}"
           ContextMenu="{StaticResource CopyPasteContextMenu}"
           Style="{StaticResource PropertyGridValueCellBorderStyle}">
        (...)
    </Border>
</DataTemplate>

标记可以正确绑定到我的视图模型,称为“PropertyEditorViewModel”。我可以在可视化树中调试系统时看到这一点。当我钻进我的上下文菜单时,绑定没有正确发生。

要使我的Command工作,我需要它正确绑定到名为“AlternateDeleteCommand”的Command to PropertyEditorView视图模型命令。

public class PropertyEditorViewModel : DisposableViewModelBase, IPropertyEditorViewModel
{
    public ICommand AlternateDeleteCommand { get; set; }

到目前为止看了一天,并且不确定为什么我的绑定没有在上下文菜单上工作,任何人都得到了我缺少的东西?

谢谢!

1 个答案:

答案 0 :(得分:0)

相关来源是否需要在上下文菜单中而不是在菜单项上?由于您正在检查上下文菜单的放置目标?

<MenuItem Header="AlternateDelete"
          Command="{Binding Path=PlacementTarget.Tag.DataContext.AlternateDeleteCommand, 
          RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Mode=OneWay}" />