3

我正在尝试使用 MVVM 模式来编写 WPF 应用程序。我正在使用缺少自动过滤功能的 WPF 数据网格(来自工具包)。所以我想实现它。我在列标题模板中添加了一个上下文菜单,它有一个名为“Filter”的 MenuItem,它实际上应该调用过滤方法。

因此,我将 MenuItem 的命令设置为适合 ViewModel 的 DelegateCommand。问题是我需要传递有关已右键单击的实际列的信息!如果我没有使用 MVVM,我会实现一个事件处理程序,它会接收一个“发送者”参数(MenuItem),然后我会找到它的父级(ContextMenu),然后它的父级会给我列。但是我怎样才能在这里实现同样的目标呢?如何将发件人传递给我的命令?这可以使用命令参数来完成吗?

我真的不想使用额外的复杂模式来完成这样一个简单的任务。毕竟,MVVM 应该简化开发,而不是相反......

4

3 回答 3

1

您可以将列标题值作为命令参数传递并使用它来获取 ViewModel 的列详细信息吗?

于 2009-07-20T22:12:07.747 回答
0

您可以尝试一些相对的源魔法,但如果您可以为每个标头绑定不同的 ViewModel,例如 HeaderViewModelItem,它可能会更容易。从那里您只需在 HeaderViewModelItem 中触发 DelegateCommand,而不是在更大的视图模型上。

我使用这个模型取得了相当大的成功。绕过一点数据绑定舞蹈。

于 2009-07-21T01:31:23.113 回答
0

如果您想将某些内容传递给命令参数,请务必注意上下文菜单位于其自己的可视树上。幸运的是,它仍然从其父级继承 DataContext,所以类似于

<MenuItem CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=DataContext}" />

应该给你 GridViewColumnHeader,或者至少它的可视化树中的一些东西。

于 2009-07-22T04:41:34.823 回答