首页 > 其他分享 >Prism视图模型定位器(ViewModelLocator)

Prism视图模型定位器(ViewModelLocator)

时间:2023-09-03 11:45:17浏览次数:35  
标签:ViewModelLocationProvider 约定 ViewModel ViewModelLocator 视图 Prism 命名

视图模型定位器(ViewModelLocator) 依照“标准命名约定”将 视图(View) 中的数据上下文链接到 视图模型(ViewModel) 的实例。

自动绑定视图模型

Prism 视图模型定位器 (ViewModelLocator) 有一个 AutoWireViewModel 属性:当设置为 true 时, AutoWireViewModelChanged 事件调用类中的 ViewModelLocationProvider 方法来解析视图的 ViewModel,然后将视图的数据上下文设置为该ViewModel 的实例。默认情况下,此行为处于启用状态:如果您不希望将其用于视图,则需要设置为 False 。使用以下 AutoWireViewModel 附加属性。将值设置 False 为选择退出和 True 明确选择加入。

<Window x:Class="Demo.Views.MainWindow"
...
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">

标准命名约定规则如下:
ViewModel 与视图类型在同一个程序集中
ViewModel 位于 .ViewModels 子命名空间中
View位于 .Views 子命名空间中
ViewModel 名称与视图名称对应,并以“ViewModel”结尾。 

程序运行如下所示:

更改标准命名约定

如果您的应用程序不遵循 ViewModelLocator 默认命名约定,您可以更改约定以满足您的应用程序的要求。该类 ViewModelLocationProvider 提供了一个名为的静态方法 SetDefaultViewTypeToViewModelTypeResolver ,可用于提供您自己的将视图关联到视图模型的约定。要更改 ViewModelLocator 命名约定,请覆盖类 ConfigureViewModelLocator 中的方法 App.xaml.cs 。然后在方法中提供您的自定义命名约定逻辑 ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver 。

protected override void ConfigureViewModelLocator()
{
base.ConfigureViewModelLocator();
ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
{
var viewName = viewType.FullName.Replace(".ViewModels.", ".CustomNamespace.");
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
var viewModelName = $"{viewName}ViewModel, {viewAssemblyName}";
return Type.GetType(viewModelName);
});
}

自定义 ViewModel 注册

在某些情况下,您的应用程序可能遵循 ViewModelLocator 默认命名约定,但您有许多不遵循约定的 ViewModel。 ViewModelLocator 无需尝试自定义命名约定逻辑以有条件地满足您的所有命名要求,您可以使用方法直接将 ViewModel 映射到特定视图 ViewModelLocationProvider.Register 。MainWindow 以下示例显示了在名为 的视图和名为 的 ViewModel 之间创建映射的各种方法 CustomViewModel 。 

类型/类型 

ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), typeof(CustomViewModel));

类型/工厂

ViewModelLocationProvider.Register(typeof(MainWindow).ToString(), () => Container.Resolve<CustomViewModel>());

通用工厂 

ViewModelLocationProvider.Register<MainWindow>(() => Container.Resolve<CustomViewModel>());

通用类型

ViewModelLocationProvider.Register<MainWindow, CustomViewModel>();

标签:ViewModelLocationProvider,约定,ViewModel,ViewModelLocator,视图,Prism,命名
From: https://www.cnblogs.com/ZHIZRL/p/17674816.html

相关文章

  • 视图开发 命令式 声明式 将视图和数据分离
    10|Widget中的State到底是什么?https://time.geekbang.org/column/article/108576 下述代码分别展示了在Android、iOS及原生Javascript中,如何将一个文本控件的展示文案更改为HelloWorld://Android设置某文本控件展示文案为HelloWorldTextViewtextView=(TextView)f......
  • ORA-01031: insufficient privileges 19c跨用户视图查询 with grant option
    问题概述某客户从11.2.0.1升级迁移到19.16版本后,应用反应部分查询功能无法使用报无权限,数据库中增加了ORA-01031:insufficientprivileges跟踪event进行分析问题复现创建三个测试用户createusertest1identifiedbyoracle123;createusertest2identifiedbyoracle123;......
  • Prism对话框之自定义DialogWindow
    Prism对话框之自定义DialogWindow1.自定义DialogWindow窗体样式(1)定义DialogWindow窗体类,注意要实现IDialogWindow///<summary>///CustomDialogWindow.xaml的交互逻辑///</summary>publicpartialclassCustomDialogWindow:Window,IDialogWindow{publicIDi......
  • Cognex InSight 电子表格视图功能介绍
    1.界面预览:这里我们将整体界面大致分为7个大的部分,当然布局可以按照自己的习惯自由拖放,这里只展示默认视图。各部分的功能说明:①菜单栏:这里对关键几个功能做介绍,没有提到都不是很重要 查看:当界面上的某一部分没有显示时,可以通过查看菜单重新打开。 传感器: 帮助–InS......
  • sql server创建视图操作
    1、什么是视图视图就是一个虚拟的数据表,该数据表中的数据记录是有一条查询语句的查询结果得到的。2、创建视图准则创建视图需要考虑一下准则:  #视图名称必须遵循标识符的规则,该名称不得与该架构的如何表的名称相同  #你可以对其他......
  • oralce 使用物化视图实例
    --创建物化视图30分钟刷新一次CREATEMATERIALIZEDVIEWtblcheckitemview_mvREFRESHCOMPLETESTARTWITHSYSTIMESTAMPNEXTSYSTIMESTAMP+INTERVAL'30'MINUTEASSELECT*FROMtblcheckitemview;--启用物化视图自动刷新BEGINDBMS_MVIEW.REFRESH('tblcheckitemview_mv'......
  • Prism-AutoWireViewModel
    目录快速实践View.DataContext=GetViewModelInstance()的时机自动为View构建合适的ViewModel的策略Prism自动确认ViewModelType的规则实例化策略依赖注入无关性开发规范静态类ViewModelLocationProvider维护一张View.GetType().ToString()-->ViewModel实例的映射表,以及一张......
  • Postgresql涉及复杂视图查询的优化案例
    一、前言对于含有union,groupby等的视图,我们称之为复杂视图。这类的视图会影响优化器对于视图的提升,也就是视图无法与父查询进行合并,从而影响访问路径、连接方法、连接顺序等。本文通过例子,给大家展示PostgreSQL这类问题及针对该问题的优化方法。二、Union视图的优化1、......
  • Prisma - 入门
    Prisma是一个开源的数据库工具链项目,支持PostgreSQL、MySQL、MongoDB、SQLServer和SQLite。下面我会使用Mysql+Typescript来作为演示。安装Prisma首选你需要有一个Node环境。然后新建一个文件夹,初始化Node项目。npminit-ynpmitypescriptts-node--save-devnpmipris......
  • openGauss学习笔记-45 openGauss 高级数据管理-物化视图
    openGauss学习笔记-45openGauss高级数据管理-物化视图物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。按照刷新方式物化视图分为两种:全量物化视图:仅支持对已创建的物化视图......