c# - View 如何知道在 WPF 中使用什么 ViewModel?

标签 c# wpf mvvm

谁能解释一下 View 和 ViewModel 是如何连接的?我在任何地方都找不到引用 ViewModel 的 View 的 xaml 或 xaml.cs,也找不到引用 View 的 ViewModel.cs 文件中的任何内容,但它们以某种方式连接,并且将 ViewModel 的成员绑定(bind)到 View 工作.

此外,在每个构造函数中,只有 View 的 InitializeComponent 和 ViewModel 的基本构造函数(没有 View 的声明/定义)。

谢谢!

最佳答案

这里有多种选择。

某些东西 必须将 View 的 DataContext 设置为 ViewModel 的一个实例。这里有很多选项:

  • 这可以直接在 xaml 中完成(View 只是直接实例化 ViewModel)。
  • 这可以在 View 的构造函数中完成 (this.DataContext = new MyViewModel();)
  • 这可以通过 DataTemplate
  • 处理
  • “协调”类可以将它们连接在一起(即:一个单独的“演示者”类可以构造两者并适本地设置 DataContext)

最常见的是让 View 在 xaml 中定义 VM(View-first),或者让一切都基于以 ViewModel 为中心的观点,并让 WPF 基于绑定(bind)的 VM 自动创建 View (ViewModel 优先)。

许多工具包都使用前一种方法,例如 MVVM Light .后一种方法是我在 MVVM blog series 中使用的方法, 并被其他一些工具包使用。

关于c# - View 如何知道在 WPF 中使用什么 ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141692/

相关文章:

c# - 使用 VisualStateManager 隐藏或显示 ListViewItem 的堆栈面板

c# - 如何在初始化渲染器之前调用方法 [Wpf]

c# - 混合winForm/wpf应用程序中的ReactiveUI

wpf - 如何使用 MVVM 从 WPF 对话框中获取值

c# - 有没有办法使用 C# 创建 Azure AD B2C 实例?

c# - Swashbuckle 也在 json 文件中创建时间跨度类

c# - 如何在标题标签后动态添加脚本

c# - 递归检查接口(interface)的实现,c#

wpf - 用于复合绑定(bind)的 ViewModel 与 ValueConverter

wpf - 绑定(bind)到 WPF 中的 ValidationRule