2009-07-20 45 views
3

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

所以我设置了一个MenuItem的命令是适当的DelegateCommand去ViewModel。问题是我需要传递有关右键单击的实际列的信息!如果我没有使用MVVM,我会实现一个事件处理函数,该函数会接收一个“sender”参数(MenuItem),然后我会找到它的父类(ContextMenu),然后它的父类会给我列。但是我怎么能在这里做到同样的事情?我怎样才能将发件人传递给我的命令?这可以使用ComandParameter完成吗?

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

回答

1

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

+0

我该怎么做?像 2009-07-20 23:04:18

+1

只是一个DataContext绑定将做的伎俩 2009-07-22 04:56:58

0

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

我用这个模型取得了相当不错的成功。获得一点数据绑定舞蹈。

0

如果要将某些内容传递给command参数,请注意上下文菜单位于其自己的可视化树上。幸运的是,它仍然继承其父DataContext的,所以像

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

应该让你的GridViewColumnHeader,或者至少东西在它的可视化树。