当前位置:  开发笔记 > 编程语言 > 正文

MV-VM设计问题.从ViewModel调用View

如何解决《MV-VM设计问题.从ViewModel调用View》经验,为你挑选了2个好方法。

我刚刚开始研究MV-VM的WPF应用程序.到目前为止,除了这个特殊问题,一切都有意义......

我有一个ViewModel我会称之为搜索.此ViewModel绑定到数据网格并列出项目的结果.现在,我有一个命令,需要调出另一个视图,项目的详细信息.

将逻辑显示在搜索视图中显示另一个视图似乎不对,它根本不可测试.

这是我的ViewModel实现,它是不可测试的......

public class SearchViewModel
{
   public void SelectItem()
   {
     // I want to call the DetailsView from here
     // this seems wrong, and is untestable
     var detailsView = new DetailsView();
     detailsView.Show();
   }
}

从ViewModel方法显示视图的逻辑在哪里进入这种模式?



1> Micah..:

正如基夫所说:

视图永远不应在UI层"下方"的任何位置实例化.虚拟机存在于该领域之下,因此这不是放置该逻辑的地方(正如您已经意识到的那样).

几乎总会有一些UI级别事件表明需要创建视图.在您的示例中,它可能是数据网格上的行(双)单击事件.这将是新手并显示您的DetailsView窗口的地方.

您必须意识到MV-VM与MVC或MVP等其他模式略有不同.ViewModel没有直接的UI知识.打开另一个视图是特定于视图的功能.视图模型应该更少关注使用它的数据的视图数量或数量.我很可能永远不会通过命令打开视图.

alt text http://blogs.msdn.com//johngossman/attachment/576163.ashx



2> Chris Staley..:

视图永远不应在UI层"下方"的任何位置实例化.虚拟机存在于该领域之下,因此这不是放置该逻辑的地方(正如您已经意识到的那样).

几乎总会有一些UI级别事件表明需要创建视图.在您的示例中,它可能是数据网格上的行(双)单击事件.这将是新手并显示您的DetailsView窗口的地方.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有