我刚刚开始研究WPF应用程序的M-V-VM。到目前为止,除了这个特殊的问题之外,所有的事情都是有意义的。
我有一个ViewModel,我把它叫做Search。此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方法的视图的逻辑在哪里?
发布于 2008-11-19 21:27:13
视图永远不应该实例化在UI层“下面”的任何地方。VM位于该领域的下方,因此这里不是放置该逻辑的地方(正如您已经意识到的那样)。
几乎总是会有一些UI级事件指示需要创建视图。在您的示例中,它可能是数据网格上的行(双击)单击事件。这将是一个新的地方,并显示您的DetailsView窗口。
发布于 2008-11-20 21:27:11
正如基夫所说:
视图永远不应该实例化在UI层“下面”的任何地方。VM位于该领域的下方,因此这里不是放置该逻辑的地方(正如您已经意识到的那样)。
几乎总是会有一些UI级事件指示需要创建视图。在您的示例中,它可能是数据网格上的行(双击)单击事件。这将是一个新的地方,并显示您的DetailsView窗口。
您必须认识到,M-V-VM与MVC或MVP等其他模式略有不同。ViewModel不直接了解UI。打开另一个视图是特定于视图的功能。视图模型不应该关心什么或者有多少视图在使用它的数据。我很可能永远不会通过命令打开视图。
发布于 2009-01-30 10:28:15
这是一个基本的经验法则。
https://stackoverflow.com/questions/303006
复制相似问题