MVVM View 对 ViewModel 的引用

标签 mvvm

我在 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/

相关文章:

c# - 使用 MVVM Light 在 WP7 项目中抛出 UnauthorizedAccessException(无效的跨线程访问)

c# - 与 Caliburn Micro 问题的深度属性绑定(bind)

.net - Wpf 用户安全策略

c# - 从自定义控件绑定(bind)到 ObservableCollection

c# - 以 MVVM 方式导出 DataGrid

c# - WPF DataGrid 通过命令双击 + INotifyPropertyChanged?

MVVMCross iOS : How to trigger RowSelected on a Custom TableViewSource using CreateBindingSet?

c# - 如何从 View 模型中触发对 View 中对象的方法调用

c# - 在 WPF 中的 xaml View 中打开另一个窗口

android - 在 Activity 和 ViewModel 之间传递数据