我在 WPF 应用程序中使用 MVVM。我对两者都很陌生。让我声明我不是 MVVM 模式的纯粹主义者,我正在尝试使用尽可能多的最佳实践,但我正在尝试做出我认为合理的妥协以使其在我们的环境中工作。例如,我不想在我的 View 代码隐藏中实现 0% 代码。
我有几个关于最佳实践的问题。
1) 我知道我不希望我的虚拟机知道附加的 View ,但是 View 引用它的虚拟机是否合理?
2)如果一个 View 中的控件打开另一个 View (例如对话框),我应该在 View 中处理这个吗?在 VM 中处理它似乎是错误的,因为 VM 对特定 View 有了一些了解。
最佳答案
1)View通过DataContext肯定有对ViewModel的引用。并且您可以在您的 View 中转换 DataContext:
public class ShellView : Window
{
…
public ShellViewModel { get { return DataContext as ShellViewModel; } }
这并不违反 Model-View-ViewModel 模式。
.
2)你是对的。 ViewModel 不应打开另一个 View。更好的方法是使用 Controller 。他们负责应用程序的工作流。
如果您对更详细的信息感兴趣,那么您可以查看 WPF Application Framework (WAF) .
关于MVVM View 对 ViewModel 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539591/