博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从Prism中学习设计模式之Adapter模式
阅读量:4961 次
发布时间:2019-06-12

本文共 2051 字,大约阅读时间需要 6 分钟。

Prism是一款轻量级的WPF框架,用于建立复合的WPF应用程序,尽可能的将Ui和逻辑分开。在对这款框架的理解过程也是一个对设计模式的理解过程。

Prism Link:

                  图1

如图1,是Prism的架构图,从中我们可以看到使用了多种设计模式,本文对Shell和Region中使用的Adapter模式进行扩展。

Adapter模式的讲解:

Link: 

 

上文详细描述了Adapter模式的定义、实现。

在Prism中Bootstrapper主引导类中在ConfigureRegionAdapterMappings虚方法中实现了以下控件的注册,提供相关类的适配转换:

  • ContentControl
  • TabControl(Sliverlight)
  • Seletor
  • ItemControl

在Shell中实现控件的适配。代码如下:

ConfigureRegionAdapterMappings
protected virtual RegionAdapterMappings ConfigureRegionAdapterMappings()        {            RegionAdapterMappings regionAdapterMappings = ServiceLocator.Current.GetInstance
(); if (regionAdapterMappings != null) {#if SILVERLIGHT regionAdapterMappings.RegisterMapping(typeof(TabControl), ServiceLocator.Current.GetInstance
());#endif regionAdapterMappings.RegisterMapping(typeof(Selector), ServiceLocator.Current.GetInstance
()); regionAdapterMappings.RegisterMapping(typeof(ItemsControl), ServiceLocator.Current.GetInstance
()); regionAdapterMappings.RegisterMapping(typeof(ContentControl), ServiceLocator.Current.GetInstance
()); } return regionAdapterMappings; }

以上我们知道了来龙去脉,这样我们可以通过复写改方法实现功能的扩展。

如我们需要增加ListBox,实现如下:

1.继承IRegionAdapter接口

public class ListBoxRegionAdapter : IRegionAdapter{    public IRegion Initialize(object regionTarget, string regionName)    {        ListBox listbox= regionTarget as ListBox;                return new Region();    }}

2.重写Bootstrapper的ConfigureRegionAdapterMappings方法,注册映射关系

1 protected override RegionAdapterMappings ConfigureRegionAdapterMappings()2 {3     RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();4     regionAdapterMappings.RegisterMapping(typeof(ListBox), this.Container.Resolve
());5 return regionAdapterMappings;6 }

这样就完成了适配的扩展。

 

 

 

 

转载于:https://www.cnblogs.com/tmywu/archive/2013/04/20/3033174.html

你可能感兴趣的文章
我对应用软件——美团的看法
查看>>
我最喜欢的 5 个 Gedit 插件
查看>>
OOoLatex:在 OpenOffice.org 中拔出 Latex 公式
查看>>
linu学习第二天:文件系统相关操作
查看>>
执行了的程序,才是你的程序.
查看>>
在AxureRP8中实现广告文字滚动效果
查看>>
jQuery获取CSS样式中的颜色值的问题
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
Sqlite文件在ubunut的查看
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
kettle 数据库连接失败
查看>>
ListView失去焦点选中行不能高亮显示的问题解决
查看>>
# jsp及servlet学习笔记
查看>>
Kconfig详解
查看>>
(四)hadoop系列之__hadoop搭建(单机配置)
查看>>
nodejs爬虫数据存入mysql
查看>>
sphinx2.8.8的配置文件
查看>>
Visual Studio 2019 正式版 更新内容
查看>>
4、下行短信发送WebService、下行短信发送服务 -功能详细设计 --短信平台
查看>>