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

Prism视图模型定位器(ViewModelLocator)

时间:2024-08-02 17:52:19浏览次数:14  
标签: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>();

来源:https://www.cnblogs.com/ZHIZRL/p/17674816.html

 

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

相关文章

  • 一个wpf项目的搭建prism框架mvvm
    一个wpf项目的搭建prism框架mvvm简单prism项目:1.新建一个wpf的项目2.引入包:在nuget中,prism.DryIoc3.把空项目应用转化成Prism,把App基类Application改为PrismApplication,因为这个基类是分布类,其中app.xaml.cs基类改为PrismApplication,和xaml的标签,引入命名空间后改为<prism......
  • 4.视图类接口
    【一】项目改名重命名目录重命名项目设置--语言和框架--Django:配置正确的Django项目根、设置改项目文件夹名需使用全局替换,将原本的项目名替换成新的项目名重新配置Django服务器【二】模块与包导入规则1)介绍模块:就是一个py文件脚本:可直接右键运行的py文件......
  • express开发api指南--集成ORM(prisma)
    9.1安装依赖#全局安装prismacnpminstallprisma-g#添加开发依赖cnpminstallprisma--save-dev#创建Prisma架构文件模板,设置PrismaORM项目npxprismainit#安装并生成PrismaClientcnpminstall@prisma/client-gcnpminstall@prisma/client--save9.2连......
  • 环境变量和python多版本共存,视图层源码分析,视图层总结,路由层,
    Ⅰ环境变量和python多版本共存【一】环境变量【1】什么是环境变量无论是win,mac,linux都有环境变量的概念,以win为例什么是环境变量?环境变量(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在......
  • 【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写
    问题现象使用如下语句准备测试数据:altersystemsetquery_rewrite_enabled=forcescope=both;droptabletest;createtabletest(tidnumber,tnamevarchar2(30));beginforiin1..100000loopinsertintotestvalues(i,i||'abcd');endloop;end;/commit......
  • 返回视图与副本。尝试在 DataFrame 的切片副本上设置一个值。尝试使用 .loc[row_index
    我从雅虎财经(yfinance)下载了有关股票交易价格和交易量的数据。然后我创建了Closes数据框,其中包含收盘价和成交量的数据(我删除了不必要的信息)。然后我想将列添加到Closes数据框中,并计算年、季度、月和周的平均交易量。但在执行代码时,会出现警告“正在尝试在DataFrame切......
  • MySQL 学习笔记 进阶(SQL优化,视图,存储过程 上)
    SQL优化 SQL优化-插入数据insert优化·批量插入insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry');·手动提交事务starttransaction;insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry......
  • 21、flask-进阶-类视图和RESTful-前后端分离概念
    前后端分离与不分离概念前后端不分离:如render_template('index.html',data=data)这种就是前后端不分离前端和后端一起渲染前后端分离:后端返回json数据-jsonify()前端使用ajax来请求数据:ajax各自处理各自的数据,代码不在一起http请求方式:GET:查询POST:添加数据......
  • 数据表或视图不存在[错误代码] SQLSTATE[42S02],数据库表不存在
    问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开过数据库表,导致升级时数据表和官方不一致,从而影响升级。如:网站搬家处理不当,后台版本与数据库版本不一致。 ......
  • Windows10禁用资源管理器文件夹自动视图转换
    在Windows系统中,当使用资源管理器浏览文件夹时,系统有时会自动将文件夹视图转换为特定类型(如音乐或图片)的显示模式,这可能会给一些用户带来不便。为了禁用这个功能,你可以通过修改注册表来实现。以下是详细的步骤:方法一:通过修改注册表禁用自动视图转换打开注册表编辑器:按下Win+......