0

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

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

我的查询:

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

请建议我解决方案!

4

1 回答 1

2

最简单的方法是将双击事件处理程序添加到列表中。请记住:MVVM 并不意味着视图中没有代码!这意味着视图只处理视图关注点。您可以提出一个非常好的论点,即 EventArgs 仅对视图有意义,如果您想将其传递给 ViewModel,您应该只传递相关信息。如果您必须执行诸如从 EventArgs 中提取数据以将其传递给 ViewModel 之类的操作,那么这是可以接受且正确的……并且比将 EventArgs 传递给 ViewModel 更好,恕我直言。

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

一些 MVVM 框架允许您这样做(尽管有很多关于这是否是一个好主意的讨论)。特别是,MVVM Light Toolkit不久前添加了这个来支持拖放(如果我没记错博客文章的话)。

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

于 2010-03-21T13:22:04.607 回答