如何将视图中的EventArgument信息传递给WPF中的视图模型?

时间:2010-03-21 05:11:21

标签: wpf mvvm wpf-controls mvvm-foundation

我的应用程序中有ListView控件,该控件绑定到 CustomObject 列表< CustomObject >的集合。 CustomObject 具有单独的视图。此ListView具有单独的视图模型。

集合List _customobject包含在ListView ViewModel类中。

我的查询:

当用户双击ListView的任何一行时,我想调用一个显示自定义对象属性的视图。 ListView双击命令绑定到视图模型中的 ListViewDoublClick 命令。 CustomObject位于listview双击命令的事件参数中。为了实现这一点,我必须传递自定义对象(或自定义对象的唯一id属性,我可以从集合中检索自定义对象)作为命令参数。

请建议我的解决方案!!

1 个答案:

答案 0 :(得分:2)

最简单的方法是在列表中添加双击事件处理程序。请记住:MVVM并不意味着视图中没有代码!这意味着视图仅处理视图问题。你可以提出一个非常好的论据,即EventArgs只对视图有意义,如果你想将它传递给ViewModel,你应该只传递相关的信息。 如果你必须做一些事情,比如从EventArgs中提取数据以将其传递给ViewModel,这是可接受的和正确的......并且比将EventArgs传递到ViewModel,恕我直言更好。

(我确信在这一点上我会有一些分歧,但处理UI交互是一个View关注点,如果替代方案是编写行为或使用框架来使单个控件在单个页面上工作,记住:YAGNI和模式不是宗教。)

有几个MVVM框架允许你这样做(虽然有很多关于它是否是个好主意的讨论)。特别是,MVVM Light Toolkit在不久前添加了这个以支持拖放(如果我记得正确的博客文章)。

如果你没有使用MVVM框架,我已经完成了写一个行为,允许我这样做,如果我要在多个地方做同样的事情。在这种情况下,我通常会从EventArgs中提取我关心的信息(即您可能并不真正想要完整的事件参数,但您可能关心点击了哪个项目以及其他一些数据)。