【问题标题】:Binding Context menu commands to ViewModel which is not in context Visuals tree将上下文菜单命令绑定到不在上下文视觉树中的 ViewModel
【发布时间】:2013-09-17 04:14:39
【问题描述】:

我有一个 treeView,它的 itemsource 是我的 Model 类的集合。 我在 treeView 上添加了一个上下文菜单。由于 contextMenu 的命令应该在可视化树中,所以我不得不将它们放在我的 Model 类中。哪个是错误的(将目录绑定到模型)。

如何将上下文菜单的命令绑定到我的 ViewModel 而不是模型?

谢谢

【问题讨论】:

  • 你能分享你的 xaml 代码吗?

标签: wpf xaml mvvm contextmenu


【解决方案1】:

您不需要在模型中放置命令。在这里,您可以访问 ViewModel 中的命令,如下所示: 这里Tag 将包含与 ViewModel 的绑定,可用于访问命令。

    <TreeView Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
      <TreeView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="MyCommand" 
                     CommandParameter="{Binding }"
                     Command="{Binding Path=PlacementTarget.Tag.DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
        </ContextMenu>
      </TreeView.ContextMenu>
    </TreeView>

【讨论】:

  • 我不想更改 TreeView 的来源。我只想在 ViewModel 中处理上下文菜单的事件
  • 我的 VieeModel 确实因此被解雇了。但是现在我怎么知道该命令是针对哪个项目调用的呢?我似乎没有得到任何地方:s
  • 所以不要将上下文菜单放在整个树视图上。尝试将上下文菜单放在树视图项上。以树视图项的样式定义它。然后您可以在命令参数中发送项目,例如 Binding=PlacementTarget .DataContext
  • 我把它放在了 TreeViewItems 样式中。似乎不起作用:s该命令没有被调用
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多