C# prism 框架
定义Region (RegionManager)
定义Region 的方式有两种,一个是在XMAL界面指定,另一种这是代码当中指定。
RegionManager.RegionName(XMAL)
RegionManager.SetRegionName (Code)
RegionManager 除了定义区域,还有一下功能:
维护区域集合
提供对区域的访问
合成视图
区域导航
定义区域
-----------------------------------------------------------------------------------
xml 文件
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
C# code
public MainWindow(IRegionManager regionManager)
{
InitializeComponent();
_regionManager = regionManager;
_regionManager.RegisterViewWithRegion("MainStack", typeof(Login));
this.Loaded += MainWindow_Loaded; this.Loaded += MainWindow_Loaded;
}
---------------------
自定义adapter
public class StackPanelAdapter : RegionAdapterBase<StackPanel>
{
protected StackPanelAdapter(IRegionBehaviorFactory regionBehaviorFactory):base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, StackPanel regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if(e.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach( FrameworkElement item in e.NewItems)
{
regionTarget.Children.Add(item);
}
}
};
}
protected override IRegion CreateRegion()
{
return new Region();
}
}
app code 注册Adaptor
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// containerRegistry.RegisterForNavigation<Login>();
//containerRegistry.RegisterForNavigation<CreateAccount>();
}
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
{
base.ConfigureRegionAdapterMappings(AdapterMappings);
AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
}
}
-----------------------------------------
页面的跳转
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<PageA>();
containerRegistry.RegisterForNavigation<PageB>();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
_regionManager.RequestNavigate("MainRegion", "PageA");
}
module 的使用
public class MainModuleModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
var _RegionManager=containerProvider.Resolve<IRegionManager>();
var region= _RegionManager.Regions["MainRegion"];
region.RequestNavigate("ViewA");
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ViewA>();
}
}
--------------------------------------------------------------------------------------------
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<PageA>();
containerRegistry.RegisterForNavigation<PageB>();
}
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings AdapterMappings)
{
base.ConfigureRegionAdapterMappings(AdapterMappings);
AdapterMappings.RegisterMapping(typeof(StackPanel),Container.Resolve<StackPanelAdapter>());
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog(); //目录创建于配置文件
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<MainModule.MainModuleModule>();
}
}
C# prism 框架的更多相关文章
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- WPF Prism框架下基于MVVM模式的命令、绑定、事件
Prism框架下的自定义路由事件和命令绑定 BaseCode XAML代码: <Button x:Class="IM.UI.CommandEx.PrismCommandEx" ...
- 在Prism 框架中,实现主程序与模块间 UI 的通信
背景: 在模块的UI中包含 TreeView 控件,在该树形控件的每一节点前面定义了一个复选框,如图 需求: 在两个不同的应用程序中使用该控件,而它在不同应用程序中的外观则并不一致,按照本例,即一个显 ...
- Prism框架研究(一)
从今天起开始写一个Prism框架的学习博客,今天是第一篇,所以从最基本的一些概念开始学习这个基于MVVM的框架的学习,首先看一下Prism代表什么,这里引用一下比较官方的英文解释来看一下:Prism ...
- Prism框架中加载类库中时其中第三方类dll提示无法加载程序集
Prism框架是采用一种依赖注入的方式动态加载程序集,能够在程序需要加载的时候将程序集注入到里面去,实现程序的热插拔效果,而且采用这种框架能够让我们进行一个大项目的独立开发,在最近的一个项目中在独立开 ...
- 项目中使用Prism框架
Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且 ...
- Prism框架在项目中使用
本文大纲 1.Prism框架下载和说明 2.Prism项目预览及简单介绍. 3.Prism框架如何在项目中使用. Prism框架下载和说明 Prism框架是针对WPF和Silverlight的MVVM ...
- Prism框架的Module(模块化)编程
Prism框架用的是新版本的,Prism7.1.关于其中的变动,感兴趣的参考https://www.cnblogs.com/hicolin/p/8694892.html 如何告诉Shell(我们的宿主 ...
- Prism框架实战——订餐软件
参考B站刘铁猛老师的订餐软件https://www.bilibili.com/video/av29782724?from=search&seid=6787438911056306128 环境: ...
- Prism框架的Regions使用
Prism框架的Regions,可以把用户控件.窗体等附加到主窗体指定的控件中. [实战1] 1.新建Prism Blank App(WPF) 项目:Demo0810 Views文件夹处,鼠标右键—— ...
随机推荐
- Ubuntu虚拟机基本环境搭建以及参数设置
# 设置root账户密码 sudo passwd root # 修改源镜像(提高下载更新速度) sudo apt-get update pip install open-vm-tools pip in ...
- python 得到字典的所有键 和值
a={} a={"a":1,"b":2,"c":3,"d":4} print(a) print(a.items()) p ...
- win10禁止粘滞键 禁止按5次shift开启粘滞键
如果你感觉粘滞键的快捷键影响了你的使用或想强行更改连续按5次上档键的指向的话,建议用你需要的程序替换%windir%\system32文件夹下面的sethc.exe @echo offclsdel / ...
- 结对开发_石家庄地铁查询web系统_psp表
结对开发_石家庄地铁查询_博客地址:https://www.cnblogs.com/flw0322/p/10680172.html PSP0: PSP0 Personal Software Proce ...
- 从代码生成说起,带你深入理解 mybatis generator 源码
枯燥的任务 这一切都要从多年前说起. 那时候刚入职一家新公司,项目经理给我分配了一个比较简单的工作,为所有的数据库字段整理一张元数据表. 因为很多接手的项目文档都不全,所以需要统一整理一份基本的字典表 ...
- 【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
问题描述 Azure Redis在使用的过程中,多次无规律的出现超时问题.抓取到客户端的异常错误后,想进一步的分析是何原因导致了如下异常呢? Timeout awaiting response (ou ...
- Python语言对Json对象进行新增替换操作
# Json字符串进行新增操作import jsonimport os# os.path.dirname(__file__):表示当前目录path = os.path.join(os.path.dir ...
- Python - list 列表常见方法
list.append(x) 介绍 在列表的末尾添加一个元素 相当于 a[len(a):] = [x] 返回值 None 栗子 # append a = [1, 2, 3] b = [4, 5, 6 ...
- debian9 python环境设置
file /usr/bin/python which python2 which python3 mv /usr/bin/python /usr/bin/python_bk ln -s /usr/bi ...
- js循环修改对象内层元素的值
问题:存在一个对象,该对象的内部元素也为对象,子对象的元素也为对象,...(即多层对象构成的对象,具体如下),那么应该如何修改最内层元素的值(如 obj.a.a.a = 5)? var obj = { ...