时隔很久,又回到了silverlight的学习中。前面对silverlight有了大致的了解,对采用MVVM模式开发有了大概的概念,简单总结下MVVM下的silverlight开发过程。

1、采用MVVM架构首先将View和ViewModel分离,使得设计者与开发者能够各司其职,在View中可以利用Binding实现对ViewModel的有关数据及事件的加载。但在实践中发现这个模式也会让我异常痛苦,由于View与ViewModel分离,在ViewModel中无法知道View是什么,这就带来了ViewModel与View通信的问题,虽然可以采用Messager实现双方的通信,但在View中需要Coding。当然最痛苦的莫过于窗体的调用,至今都想不出有什么好的办法去实现,无意中在Prism发现了有ChildWindow的调用方式,也让我决定学习Prism,毕竟Silverlight的开发框架主流是MVVM+PRISM+RIA Servic。

2、在MVVM+RIA的开发过程中,可以使用EF工具从数据库中生成领域模型,然后使用domianservice实现对模型的操作,这极大减轻了我开发的工作量。但实际应用中又发现了问题,我在ViewModel中对Model的调用实际是调用的RIA生成的元数据模型,我并没有在此基础上重建Model,虽然节省了大量code,但由于使用底层的元数据模型,有很多数据验证是在元数据中进行标注的,而一旦需要更新元数据则需要重新标注元数据。所以现在也没法弄清楚是否需要在元数据基础上再增加一层Model层。

3、在MVVM模式中ViewModel需要处理应用逻辑,需要定义大量事件,所以ViewModel有时会显得异常复杂,如何能够简化?自然想到了组合模式,这也加强了对Prism的学习决心,虽然理解Prism将会是一个痛苦的过程。

先开始一个简单的Prism的过程:

1、创建Silverlight应用程序,项目添加Prism引用,将MainFrame改为Shell

[Export] public partial class Shell : UserControl { public Shell() { InitializeComponent(); } }

2、修改Shell.xaml,在Shell.xaml中添加Prism引用

xmlns:prism="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism"

添加Region

<ItemsControl Name="Nav" prism:RegionManager.RegionName="Nav"></ItemsControl>

3、修改App.xaml.cs中项目启动方法

private void Application_Startup(object sender, StartupEventArgs e) { //this.RootVisual = new Shell(); Bootstrapper boot = new Bootstrapper(); boot.Run(); }

4、添加Bootstrapper 启动类,继承来自MefBootstrapper,重载MefBootstrapper的有关方法

protected override DependencyObject CreateShell() { return this.Container.GetExportedValue<Shell>(); } protected override void InitializeShell() { base.InitializeShell(); App.Current.RootVisual = (UIElement)this.Shell; }
protected override void ConfigureAggregateCatalog() { base.ConfigureAggregateCatalog(); this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly)); }

到此,一个最简单的Prism的应用完成!

转载于:https://www.cnblogs.com/oldkingsir/archive/2012/02/19/2365625.html

silverlight 学习笔记 (七):Prism的第一个应用相关推荐

  1. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  2. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  3. ROS学习笔记七:使用rqt_console和roslaunch

    ROS学习笔记七:使用rqt_console和roslaunch 本节主要介绍在调试时使用的rqt_console和rqt_logger_level,以及一次性打开多个节点的工具roslaunch. ...

  4. window的dos命令学习笔记 七

    文章目录 一.dos历史学习笔记(后期整合到这里,我想能学到这里的应该不多了,嘿嘿,加油) 二.执行状态返回值(`%errorlevel%`,和shell中`$?`相似): 三.视窗 1.color ...

  5. OpenCV学习笔记(七)——图像梯度及边缘检测

    图像梯度计算的是图像变化的速度.对于图像的边缘部分,其灰度值变化较大,梯度值也较大:相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小.一般情况下,图像梯度计算的是图像的边缘信息. ...

  6. Polyworks脚本开发学习笔记(七)-完成一个自动化任务

    Polyworks脚本开发学习笔记(七)-完成一个自动化任务 利用之前的命令建立一个自动化脚本 第一步: 设置环境参数 设置注释字体避免出现不兼容中文的乱码,常用微软雅黑 #设置注释字体 VIEW A ...

  7. SilverLight学习笔记--Silverlight中WebRequest通讯

    本文我们学习如何使用WebRequest类实现客户端和服务器端的通讯.      本例处理过程:在客户端,我们在文本框中输入任意文本,然后用POST方法向服务器端传递信息,服务器端收到从客户端传来的信 ...

  8. SilverLight学习笔记--Silverlight之数据绑定初探

    数据绑定(Data Binding)是用户界面UI和业务对象或其它数据提供者(data provider)的连接.用户界面对象称为目标,数据提供者成为数据源.   数据绑定帮助隔离应用程序的用户界面层 ...

  9. SilverLight学习笔记--建立Silverlight自定义控件(5)--绑定动画效果

    有了上述的基础,我们进一步完善我们的自定义控件,在此我们将创建Storyboard和前面的添加事件处理方法为我们的自定义控件加上动画效果.   1.首先,在MyDesignButton项目中进一步完善 ...

  10. SilverLight学习笔记--建立Silverlight自定义控件(1)--外观设计

    Silverlight 2 以丰富且强大可靠的控件模型闻名,该模型是平台中包括的控件和第三方控件包的基础.您也可以使用此控件模型构建自己的控件.   在了解如何为新平台编写自定义控件时,我经常先复制一 ...

最新文章

  1. SAP QM 执行事务代码QA11 报错- Selected set code does not exist, or data entered is incomplete-
  2. 苹果要为app store速度奇慢付出代价
  3. Exchange Server 2013就地电子数据展示
  4. 杉德支付php代码实现_php实现小程序支付完整版
  5. MySQL关于Table cache设置,看这一篇就够了
  6. leecode-8字符串转化为整数C版
  7. 将数据库返回的ResultSett转换成List装Map形式的方法(ResultSetToList)
  8. python学习之旅(入门)
  9. 数据埋点与设备指纹/设备反欺诈的区别与联系是什么?
  10. MFC隐藏EditControl控件的光标
  11. 亚马逊出的平板电脑_加量不加价,亚马逊推出新款 Fire 7 平板电脑
  12. 删好友警告,C语言最强整人小程序!(勿随便使用)
  13. 华为路由器配置IPSec (手动配置)
  14. android俄罗斯方块报告,Android 俄罗斯方块
  15. vi/vim保存报错:E37: No write since last change E162: No write since last change for buffer “[文件名称]“
  16. mysql 1114错误_mysql – ERROR 1114(HY000):表’XXX’已满
  17. 巡逻机器人(BFS)
  18. 论文翻译:Anytime Stereo Image Depth Estimation on Mobile Devices
  19. 华为mate40pro和p40pro区别-华为mate40pro和p40pro哪个拍照好
  20. 大疆工程师:如何利用6年时间成为一名优秀的机器人工程师

热门文章

  1. 软考信息系统项目管理师_项目整体管理---软考高级之信息系统项目管理师010
  2. C++_类和对象_C++运算符重载_关系运算符重载_对== !=重载实现对象的对比_---C++语言工作笔记059
  3. 大数据之-Hadoop之HDFS_hadoop集群中的安全模式_操作案例---大数据之hadoop工作笔记0075
  4. Netty工作笔记0046---TaskQueue自定义任务
  5. 数据库工作笔记14---win10系统安装sqlserver2005提示服务无法启动
  6. 国庆节前梳理一下需要自己干的工作
  7. visual studio 2017搭建linux c++开发环境
  8. hibernate集合类型映射
  9. 堆内存里的各种奇怪填充值
  10. android开发之多线程实现方法概述