silverlighPrism入门引导.docx
- 文档编号:4988618
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:46
- 大小:378.09KB
silverlighPrism入门引导.docx
《silverlighPrism入门引导.docx》由会员分享,可在线阅读,更多相关《silverlighPrism入门引导.docx(46页珍藏版)》请在冰豆网上搜索。
silverlighPrism入门引导
窗体顶端
JasonLi
博客园 首页 社区 新文章 新随笔 订阅 管理
posts-8, comments-69, trackbacks-0
Prism简介
Prism是由微软Patterns&Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的、更灵活、更易于维护并且更易于测试的WPF应用或是Silverlight应用以及WindowsPhone7应用。
使用Prism可以使程序开发更趋于模块化,整个项目将由多个离散的、松耦合的模块组成,而各个模块又可以又不同的开发者或团队进行开发、测试和部署。
目前Prism的最新版本是Prism4,于2010年11月12日发布。
Prism有很完整的文档以及丰富的示例程序。
在这里我们仅针对于Silverlight程序的开发。
在下载Prism安装包并安装完成后,会在目标文件夹中发现很多文件。
推荐首先运行RegisterPrismBinaries.bat文件,这样在开发基于Prism的程序时可以更方便地添加引用程序集。
使用Prism之前,需要了解一些概念,下面通过一个非常简单的小程序来了解一下Prism。
1.打开VisualStudio2010,新建一个SilverlightApplication项目,并添加对Prism的引用。
再创建三个Silverlight类库工程。
2.在Contract工程下新建一个接口,叫做ITextProvider。
publicinterfaceITextProvider
{
stringGetText();
}
3.在其它的三个项目中都引用Contract项目。
4.在PrismStarter工程下新建一个TextProvider类并实现ITextProvider接口。
publicclassTextProvider:
ITextProvider
{
privateinti=0;
publicstringGetText()
{
i++;
returnstring.Format("FromTextProvider[{0}]",i);
}
}
5.删除PrismStarter项目中自动生成的MainPage.xaml,创建一个新的UserControl,叫做Shell。
页面代码如下:
Class="PrismStarter.Shell" xmlns=" xmlns: x=" xmlns: d=" xmlns: mc="http: //schemas.openxmlformats.org/markup-compatibility/2006" xmlns: prism=" mc: Ignorable="d" d: DesignHeight="300"d: DesignWidth="400"> Name="LayoutRoot"Background="White"> RegionManager.RegionName="RegionA"/> RegionManager.RegionName="RegionB"/> 6.在ModuleA工程中添加对Prism程序集的引用。 并添加一个UserControl叫做ViewA,页面代码为: Name="LayoutRoot"Background="White"> Name="textModuleA"FontSize="30"VerticalAlignment="Center"HorizontalAlignment="Center"/> CodeBehind中的代码为: publicpartialclassViewA: UserControl { publicViewA(ITextProvidertextProvider) { InitializeComponent(); this.Loaded+=(s,e)=> { textModuleA.Text=string.Format("ModuleA{0}",textProvider.GetText()); }; } } 7.在ModuleA工程中添加一个类叫做ModuleA,并实现接口IModule。 publicclassModuleA: IModule { privateIRegionManager_regionManager; publicModuleA(IRegionManagerregionManager) { _regionManager=regionManager; } publicvoidInitialize() { _regionManager.RegisterViewWithRegion("RegionA",typeof(ViewA)); } } 注意这里的RegionA对应于Shell页面中的RegionName。 8.在ModuleB工程中重复6、7过程,只是将A替换为B。 9.在PrismStarter工程中添加对ModuleA和ModuleB的引用。 10.在PrismStarter工程中添加一个PrismStarterBootstrapper类,并继承UnityBootstrapper。 publicclassPrismStarterBootstrapper: UnityBootstrapper { protectedoverrideDependencyObjectCreateShell() { returnthis.Container.TryResolve } protectedoverridevoidInitializeShell() {//控制页面在初始化时显示Shell页面 App.Current.RootVisual=(UIElement)this.Shell; } protectedoverridevoidConfigureModuleCatalog() {//注册Module。 在实际开发中可以使用xaml做配置文件, //这样就可以将PrismStarter与ModuleA和ModuleB完全解耦,也就不再需要引用这两个项目 TypemoduleAType=typeof(ModuleA.ModuleA); ModuleInfomoduleA=newModuleInfo { ModuleName=moduleAType.Name, ModuleType=moduleAType.AssemblyQualifiedName, }; TypemoduleBType=typeof(ModuleB.ModuleB); ModuleInfomoduleB=newModuleInfo { ModuleName=moduleBType.Name, ModuleType=moduleBType.AssemblyQualifiedName, }; this.ModuleCatalog.AddModule(moduleA); this.ModuleCatalog.AddModule(moduleB); } protectedoverridevoidConfigureContainer() {//注册一下TextProvider,这样在通过容器请求ITextProvider时会返回TextProvider实例 base.ConfigureContainer(); this.Container.RegisterInstance } } 11.最后一步,打开App.xaml.cs,修改Application_Startup方法 privatevoidApplication_Startup(objectsender,StartupEventArgse) { PrismStarterBootstrapperbootstrapper=newPrismStarterBootstrapper(); bootstrapper.Run(); } 运行程序,结果如下: 下面简单介绍一下这个小例子中涉及到的一些概念。 Bootstrapper: 在程序中使用框架需要找到一个切入点,将框架植入进去,将一部分功能委托给框架来实现。 在Silverlight中使用Prism的切入点就是App.xaml.cs中的Application_Startup方法。 一般来说,这个方法中只是指定页面最先加载的页面,但是我们把默认的逻辑去掉,取而代之的是Bootstrapper(在本例中就是PrismStarterBootstrapper)。 当调用Bootstrapper.Run方法时,它会完成一些准备工作,如一些配置等。 因此你会发现,使用Prism后,启动程序时会比正常启动要慢一些,就是因为Bootstrapper做了许多工作。 Container: 依赖注入容器。 在程序中使用依赖注入的好处到处都可以找的到。 在Silverlight中使用容器来管理各个组件的一个很明显的好处就是使用单例来降低内存使用。 否则每次加载一个页面都需要重新创建一个也很耗费资源的。 当然好处不只这些,通过容器来注入一些服务(如本例中的IRegionManager和ITextProvider)显得相当方便。 Module: Prism帮助我们把程序分解成一个个功能模块,这些功能模块就叫做Module,通常一个工程就是一个Module。 由于Module彼此是独立的,但是在运行时需要将它们整合到一起,因此Prism需要知道Module的存在,这里就涉及到了ModuleCatalog,ModuleCatalog就是Module的容器,里面包含了所有Module的信息,以ModuleInfo的形式存在。 ModuleInfo就是对Module的抽象,包含Module的名字,类型,依赖等一些信息。 Shell: 相当于程序的入口,初始界面,还能够提供类似ASP.Net中的母版页的功能。 Shell必须由Bootstrapper创建,因为Shell需要使用的一些service,比如RegionManager等,需要在Shell显示前注册。 Region: 相当于ASP.Net中的ContentPlaceHolder(是这么叫的吧? ),起到占位符的作用,如本例中Shell中有两个Region——RegionA和RegionB,定义了两块区域。 在Module的初始化过程中,通过IRegionManager将Module中的页面放进了定义好的Region中。 IRegionManager负责管理Region,可以通过它向Region中注册View,进行导航等。 Prism的功能当然远不止这么简单,它还提供对MVVM模式的支持,对导航的支持等,在后续文章中会逐步介绍。 希望能够通过本文让大家对Prism有一定的了解。 代码下载 WPF应用程序使用程序的模型视图ViewModel设计模式 JoshSmith 本文讨论: ▪模式和WPF ▪MVP模式 ▪为什么MVVM最好为WPF ▪构建与MVVM应用程序 本文涉及以下技术: WPF,数据绑定 代码下载可从MSDN代码库 浏览代码联机 内容 订单与。 chaos 模型视图ViewModel的演变 为什么WPF开发人员喜欢MVVM 演示应用程序 中继命令逻辑 ViewModel类层次结构 ViewModelBase类 CommandViewModel类 MainWindowViewModel类 将视图应用于一个ViewModel 在数据模型和存储库 新客户数据输入窗体 所有客户都查看 向上覆盖 专业的软件应用程序的开发用户界面不容易。 它可以是数据、交互设计、可视化设计、连接,多线程处理、安全性、国际化、验证、单元测试和的Voodoo的触摸一个渴融合。 考虑用户界面公开基础系统的和必须满足其用户的不可预测的从句要求,它可以是最易失方面很多应用程序。 还有,可帮助tame此不实用的beast的常见设计模式,但正确分隔并解决问题的多种很难。 在更复杂的模式是,越将快捷方式用于以后的破坏所有以前的努力执行的操作权限的方式。 不总是在设计模式,出现错误。 有时我们使用需要编写大量代码,因为在使用的UI平台不出借本身很好地简单模式的复杂的设计模式。 需要将是一个平台,更易于构建使用简单、time-tested、开发人员批准的设计模式的UI它。 幸运的是,WindowsPresentationFoundation(WPF)提供了完全的。 世界上继续增加的速度采用WPF在软件,WPF社区已开发模式和实践自己生态的系统。 此文章中,我将讨论一些用于设计和实现客户端应用程序与WPF这些最佳方法。 利用WPF结合模型-视图-ViewModel(MVVM)设计模式)的某些核心功能我将介绍的示例程序演示了如何简单也可以是构建WPF应用程序"正确方式"。 本文末尾它将会清除数据模板、命令、数据绑定,在资源系统和MVVM模式所有结合方式来创建一个简单、可测试、功能强大的框架,的任何WPF应用程序可以thrive。 本文演示程序可以作为一个作为其核心体系结构使用MVVM实际WPF应用程序模板。 单元测试演示解决方案中的显示一组ViewModel类中存在的该功能时,测试应用程序的用户界面的功能是多么容易。 深入详细信息之前,一下为什么应首先使用像MVVM模式。 订单与混乱 是不必要的无法在简单"Hello,World! "程序中使用设计模式。 任何competent开发人员可以了解几行代码一眼。 但是,随着在程序中的功能的数的增加的代码和移动部件的行数增加相应。 最终,系统和它所包含的重复问题的复杂性鼓励开发人员可以组织方式这样做还会更便于他们代码全世界、讨论、扩展,并解决问题。 我们通过将已知的名称应用到在源代码中的特定实体降低复杂系统的认知的混乱。 我们确定名称以通过在系统中考虑其职能角色应用于一段代码。 开发人员经常故意构造一个设计模式相对于让我们可以看到organically文本模式根据其代码。 是什么不对的方法,但是本文中,我检查显式使用MVVM为WPF应用程序的体系结构的好处。 某些类别的名称包括从MVVM模式如结尾"ViewModel,如果类是视图的抽象的已知条件。 此方法有助于避免认知前面提到的混乱。 相反,您可以令人高兴的是存在是大多数专业软件开发项目中的事件的自然状态的控制混乱的状态! 模型视图ViewModel的演变 ever自人创建软件用户界面,已为了使更容易的常见设计模式。 是例如Model-视图-演示者(MVP)模式已欣赏各种用户界面编程平台上的普及。 MVP是模型-视图-控制器模式已为数十年的变体。 如果还不MVP模式之前用以下是简化的说明。 在屏幕上看到为视图、显示的数据是模型,和演示者一起挂钩两个。 视图依赖于要填充模型数据,请对用户输入做出反应,提供输入的验证(可能通过委派到模型)和其他此类任务的演示者。 如果您希望了解有关模型查看演示者,我建议您阅读Jean-PaulBoodhoo2006年8月设计模式列. 在2004,MartinFowler发布有关命名模式的文章演示文稿模型(PM)。 分开的行为和状态视图,PM模式与类似MVP。 值得关注的PM模式部分是视图的抽象创建,称为演示文稿模型。 一个的视图将,成为只是演示文稿模型的呈现。 在Fowler的解释他显示演示文稿模型频繁地更新其视图,以便两个保持与彼此保持同步。 该同步逻辑存在演示文稿模型类中的代码。 2005中,当前的WPF和Silverlight架构师,在Microsoft,一个的JohnGossmanunveiled在模型-视图-ViewModel(MVVM)模式在他的博客。 MVVM是与Fowler的演示文稿模型,这两种模式功能一个视图包含视图的状态和行为的抽象。 fowler而Gossman作为标准化可以利用WPF来简化用户界面创建的核心功能引入MVVM,作为一种创建UI的独立于平台的抽象一个的视图引入演示文稿模型。 此种意义上讲,我认为MVVM为更多常规PM图案,tailor-madeWPF和Silverlight平台的一个特例。 Glenn块的极好文章"中构建复合应用程序与WPF的prism: 模式"2008年9月刊中,他说明为WPFMicrosoft复合应用程序指导。 ViewModel从未使用过的术语。 相反,术语演示文稿模型用于描述视图的抽象。 在本文,但是,我将引用MVVM和视图的抽象,作为一个ViewModel模式。 我发现此术语是WPF和Silverlight社区中的更多prevelant。 与MVP中的对演示者不同一个ViewModel不需要对视图的引用。 视图绑定到一个ViewModel这反过来,公开模型对象和其他状态特定于视图中包含的数据的属性中。 视图和ViewModel之间绑定是简单构造由于一个ViewModel对象被设置为视图的DataContext。 如果属性值在ViewModel更改,这些新值自动传播到通过数据绑定的视图。 当用户单击一个按钮在视图时,在ViewModel的命令将执行执行所请求的操作。 ViewModel,永远不会在视图,执行模型数据所做的所有修改。 在的视图类有模型类存在,不知道该视图的ViewModel和模型时不知道。 实际上,模型是完全oblivious事实存在ViewModel和视图。 这是最松散耦合设计,多种方式支付股利,正如您很快就将看到的。 为什么WPF开发人员喜欢MVVM 一旦开发人员成为熟悉WPF和MVVM,很难区分这两者。 MVVM是WPF开发人员的语言franca,因为它是适合在WPF平台WPF为了方便地构建应用程序使用MVVM模式(在其他)。 实际上,Microsoft使用MVVM内部开发WPF应用程序,MicrosoftExpressionBlend,如,核心WPF平台时正在建设中。 WPF,如外观不控制模型和数据模板的许多方面使用显示的状态和行为的MVVM提升强的分离。 在单个的最重要方面,WPF使MVVM好模式使用的是数据绑定基础结构。 由一个ViewModel的视图的绑定属性,您获得二者之间的松散耦合,并完全删除需要一个ViewModel直接更新视图中编写代码。 数据绑定系统还支持提供了标准化的方式传输到视图的验证错误的输入的验证。 两个其他功能做这种模式因此可用的是WPF的数据模板和资源系统。 数据模板应用于在用户界面中显示的ViewModel对象的视图。 可以声明在XAML中的模板,并让资源系统自动查找并为您应用这些模板,在运行时。 您可以了解详细有关绑定和我7月2008文章中的数据模板"数据和WPF: 使用数据绑定和WPF中自定义数据显示." 如果未在WPF中的命令的支持中,MVVM模式是得强大。 本文,我将介绍如何在ViewModel可以公开一个的视图的命令从而使视图以使用它的功能。 如果您不熟悉控制,我建议您阅读BrianNoyes全面文章"高级WPF: 了解路由事件和WPF中的命令"摘自2008年9月刊。 除了在WPF(和Silverlight2)功能,使一个自然的方式构建应用程序的MVVM,模式也是受欢迎,因为ViewModel类是易于单元测试。 应用程序的交互逻辑居住在一组ViewModel类中时,可以轻松地编写测试它的代码。 在一个的意义上的视图和单元测试两个不同类型类型均ViewModel使用者。 为应用程序的ViewModels有一套测试的提供忙/快速回归测试,有助于降低维护应用程序随着时间的成本。 除了提升自动的回归测试的创建,ViewModel类的testability可以帮助正确设计用户界面,可以很容易地外观。 在设计应用程序时您通常可以决定是否内容应在视图和要编写单元测试可以占用该ViewModel通过imaginingViewModel。 如果您可以在ViewModel的编写单元测试,而不创建任何UI对象,因为它不有特定的可视元素上的任何依赖项还完全可以外观,ViewModel。 最后的开发人员使用可视化设计器,使用MVVM使得更易于创建平滑的设计器/Developer工作流。 由于视图是只需一个任意消费者一个ViewModel,它很容易就翻录出的一个视图和要呈现一个ViewModel新视图中的下拉。 此简单步骤允许快速原型和用户界面由设计器的计算。 开发团队可以专注于创建功能强大的ViewModel类和设计团队可以集中精力进行用户友好的视图。 连接两个团队的输出可能涉及小超过确保正确绑定存在视图的XAML文件中。 演示应用程序 到目前为止我已
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- silverlighPrism 入门 引导