gpt4 book ai didi

c# - M-V-VM 设计问题。从 ViewModel 调用 View

转载 作者:IT王子 更新时间:2023-10-29 04:47:25 25 4
gpt4 key购买 nike

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

我有一个 ViewModel,我将调用 Search。此 ViewModel 绑定(bind)到数据网格并列出项目的结果。现在,我有一个命令需要调出另一个 View ,即项目的详细信息。

将逻辑放在搜索 View 中显示另一个 View 似乎不对,它根本不可测试。

这是我的 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 方法显示 View 的逻辑在哪里?

最佳答案

正如 Kiff 所说:

Views should never be instantiated anywhere "below" the UI layer. VMs exist below that realm, therefore this is not the place to put that logic (as you've already realized).

There will almost always be some UIlevel event that will indicate theneed to create the view. In yourexample, it might be a row (double)click event on the datagrid. Thatwould be the place to new-up and showyour DetailsView window.

您必须意识到 M-V-VM 与 MVC 或 MVP 等其他模式略有不同。 ViewModel 不直接了解 UI。打开另一个 View 是特定于 View 的功能。 View Model 应该不太关心哪些 View 或有多少 View 正在使用它的数据。我很可能永远不会通过命令打开 View 。

alt text

关于c# - M-V-VM 设计问题。从 ViewModel 调用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/303006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com