2010-03-21 46 views
0

我有ListView控件在我的应用程序绑定到集合CustomObject List < CustomObject>。 CustomObject有单独的视图。这个ListView有单独的视图模型。如何从视图中传递EventArgument信息以查看WPF中的模型?

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

我的查询:

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

请给我解决方案!

回答

2

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

(我相信我会在这方面得到一些分歧,但处理UI交互是一个View问题,如果另一种方法是编写一个行为或使用框架来获得单个页面上的单个控件,请记住:YAGNI和模式不是宗教。)

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

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

+0

感谢Ben的回应。您已经明确指出我的担忧,称“MVVM并不意味着视图中没有代码”。其实我可以通过在视图本身中添加一个双击事件处理程序并从事件参数中提取我的自定义对象来实现。我想知道是否有可能将事件参数信息传递给视图模型。请让我知道最佳做法或通常在这种类型的场景中只能从事件参数中访问信息的情况下完成的事情..同样很多很多谢谢您的回复 – 2010-03-21 14:35:02

+0

我不确定是否有单个建议可以归类为“最佳实践”,但通常会考虑传递给ViewModel的数据是否真的是ViewData(例如坐标,EventArgs等)。如果是这样,那么在View中转换ViewModel数据并将其传递给ViewModel上的命令,恕我直言。 – 2010-03-21 17:46:10

相关问题