【发布时间】:2014-07-19 04:23:27
【问题描述】:
我继承了一个 WPF Prism 应用程序,但我很难看到视图模型如何链接到它们各自的视图 (xaml)。有时,后面的视图代码会将 DataContext 设置为正确的视图模型,但我正在处理的应用程序并没有在后面的代码中设置它。在 Prism 应用程序中还能在哪里设置?
【问题讨论】:
我继承了一个 WPF Prism 应用程序,但我很难看到视图模型如何链接到它们各自的视图 (xaml)。有时,后面的视图代码会将 DataContext 设置为正确的视图模型,但我正在处理的应用程序并没有在后面的代码中设置它。在 Prism 应用程序中还能在哪里设置?
【问题讨论】:
使用 Prism,视图模型会为您自动设置。视图中通常设置了 AutoWireViewModel=True 属性。其余的按惯例完成。 Prism 会寻找任何符合特定命名约定的 ViewModel。默认命名约定是视图的 YouPage 和视图模型的 YouPageViewModel。
可以在引导程序(通常是 app.xaml.cs 文件)中更改视图模型约定。使用 ViewModelLocator,您可以自定义命名约定。大多数人只是将其保留为默认值。
如果设置正确,视图模型所需的任何构造函数参数也将使用某种形式的 IoC 容器自动传递给它们。 Autofac、Unity 或 Ninject 之类的东西。这也将在引导程序中进行配置。
【讨论】:
可以通过 Xaml、Behind Code 或 View Model Locator 进行设置。
使用 XAML 创建视图模型
也许最简单的方法是让视图以声明方式 在 XAML 中实例化其对应的视图模型。当视图是 构造,相应的视图模型对象也将是 建造。您还可以在 XAML 中指定设置视图模型 作为视图的数据上下文。
以编程方式创建视图模型
另一种方法是让视图实例化其对应的视图 以编程方式在其构造函数中建模实例。然后它可以设置它 作为其数据上下文,如下代码示例所示。
使用视图模型定位器创建视图模型
另一种创建视图模型实例并将其与其关联的方法 视图是使用视图模型定位器。
这里是documentation。
【讨论】: