DevExpress 模块注入框架
模块注入框架(MIF)是一组帮助MVVM应用程序的类。它提供以下功能
- 将ViewModel连接到视图
- 页面之间导航
- 保存和恢复应用程序的可视和逻辑状态
- 单元测试
模块
模块是应用程序的功能单元。关于模块注入框架(MIF),模块是将ViewModel绑定到其视图的结构。每个模块实现IModule接口。
本主题介绍如何注册和控制模块
基本信息
IModule 接口如下所示
public interface IModule {
string Key { get; }
Func<object> ViewModelFactory { get; }
string ViewModelName { get; }
string ViewName { get; }
Type ViewType { get; }
}
MIF提供了一个快速的IModule实现-模块类。使用模块管理器注册方法和模块
ModuleManager.DefaultManager.Register(
regionName: "RegionA",
module: new Module(
key: "Module1",
viewModelFactory: () => new Module1ViewModel(),
viewType: typeof(Module1View)
)
);
您可以通过其键显示 、激活或删除已注册的模块
ModuleManager.DefaultManager.Inject(regionName: "RegionA", key: "Module1");
ModuleManager.DefaultManager.Navigate(regionName: "RegionA", key: "Module1");
ModuleManager.DefaultManager.Remove(regionName: "RegionA", key: "Module1");
模块创建
模块类提供了多个构造函数
/*1.*/ new Module(key: "Module1", viewModelFactory: () => new ModuleViewModel());
/*2.*/ new Module(key: "Module1", viewModelFactory: () => new ModuleViewModel(), viewType: typeof(ModuleView))
/*3.*/ new Module(key: "Module1", viewModelFactory: () => new ModuleViewModel(), viewName: "ModuleView")
/*4.*/ new Module(key: "Module1", viewModelName: "ModuleViewModel", viewName: "ModuleView")
第一种方法不包含有关View的信息,并且它设置在目标控制级别,例如:
<ContentPresenter dxmvvm:UIRegion.Region="RegionA" ContentTemplate="{StaticResource ModuleTemplate}"/>
当您 注入模块1时,MIF将创建模块视图模型实例,并将其传递到目标控件
第二种方法设置ViewType参数。在这种情况下,MIF为目标审控件创建一个特殊的DataTemplateSelector,该控件基于视图模型选择模块
<ContentPresenter dxmvvm:UIRegion.Region="RegionA"/>
//This code is a sketch for demonstration purposes.
class ViewDataTemplateSelector : DataTemplateSelector {
string Module1ViewTemplate = "
<DataTemplate>
<ModuleView/>
</DataTemplate>";
public override DataTemplate SelectTemplate(object viewModel) {
if(viewModel is ModuleViewModel)
return new DataTemplate(Module1ViewTemplate);
return null;
}
}
targetContentControl.ContentTemplateSelector = new ViewDataTemplateSelector();
第三种方法与第二种方法类似。如果您无法访问“视图”类型,可以使用它
如果您无法访问ViewModel类型,请使用最后一种方法。
DevExpress 模块注入框架的更多相关文章
- 【十】注入框架RoboGuice使用:(Your First Testcase)
上一篇我们简单的介绍了一下RoboGuice的使用([九]注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)),今天 ...
- Spring.NET依赖注入框架学习--简单对象注入
Spring.NET依赖注入框架学习--简单对象注入 在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入 常 ...
- Spring.NET依赖注入框架学习--简介
Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...
- Spring.NET依赖注入框架学习--入门
Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...
- Objection, 一个轻量级的Objective-C依赖注入框架
简介 项目主页:https://github.com/atomicobject/objection 实例下载: https://github.com/ios122/ios122 Objection 是 ...
- 史上最好用的依赖注入框架Google Guice【转】
Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC).Guice非常小而且快. (其他的依赖注入框架还有Dagger,Spring) Spring ...
- 放弃dagger?Anrdoi依赖注入框架koin
Koin 是什么 Koin 是为 Kotlin 开发者提供的一个实用型轻量级依赖注入框架,采用纯 Kotlin 语言编写而成,仅使用功能解析,无代理.无代码生成.无反射. 官网地址 优势 依赖注入好处 ...
- .NET Core 中依赖注入框架详解 Autofac
本文将通过演示一个Console应用程序和一个ASP.NET Core Web应用程序来说明依赖注入框架Autofac是如何使用的 Autofac相比.NET Core原生的注入方式提供了强大的功能, ...
- [Android]依赖注入框架google的dagger
分享一下Android依赖注入框架--Google升级版Dagger2框架 Google的Dagger2是对上一版squareup的Dagger改版,话不多说直接上项目代码. Dagger2源码 Da ...
- [Android]依赖注入框架squareup的dagger
分享一下Android依赖注入框架--Dagger使用 Dagger源码 Dagger1-Demo 希望能给大家的开发带来帮助.
随机推荐
- OceanBase使用OBLOADER、OBDUMPER进行导入导出
需求背景 需要定时给OB进行数据备份,并且在需要时可以全量导入,所以只能通过脚本来减少手动操作的繁琐. 脚本示例 导出脚本 #!/bin/bash # 这一步不能省,如果不设置定时运行时可能会有问题 ...
- 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.
完成warning和报错信息如下. 通过报错信息提示,锁定cwebp-bin,在waring中发现有提示说要更新至7或更高版本. 解决方案:在package.json中,将cwebp-bin设置版本为 ...
- Python学习笔记组织文件之用zipfile模块压缩文件
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- 87、linux root 密码忘记了
子账户登录,然后重置即可
- 统计学习导论之R语言应用(三):线性回归R语言代码实战
统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...
- NX环境变量设置脚本
1 @ECHO OFF 2 TITLE NX 环境变量设置 3 color 3f 4 :MENU 5 CLS 6 ECHO. NX环境变量设置工具 7 ECHO.******************* ...
- calibredrv 对layer做操作
#clip.tclset L [layout create xxx.gds] $L create layer 10.0 $L create polygon 10.0 10 1000 1000 2000 ...
- Docker学习——多阶段构建(六)
之前的做法 在 Docker 17.05 版本之前,我们构建 Docker 镜像时,通常会采用两种方式: 全部放入一个 Dockerfile 一种方式是将所有的构建过程编包含在一个 Dockerfil ...
- Spring学习记事本
原因:原因:Application的启动类不能放在默认的java目录,必须放在建有包的目录下.
- Linux 使用ssh服务管理远程主机
配置网络服务 配置网卡的4种方法: 创建网络会话 RHEL和CentOS系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态.可以使用 ...