从PRISM开始学WPF(二)Prism-更新至Prism7.1
0x1 PRISM?
[7.1update]Prism.UnityUnityBootstrapper被标记为 deprecated,并且建议使用 PrismApplication作为应用的基类,并且在7.1中Bootstrapper 类已经不再使用,入口代码整合到app.xaml及app.xaml.cs中去了,但这一节不影响我们继续用来了解wpf及prism,在接下来的例子中我会将实例代码更新到7.1。
PRISM项目地址:https://github.com/PrismLibrary/Prism
先看下简介:
Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Windows 10 UWP, and Xamarin Forms.
谷歌翻译:
Prism是一个框架,用于在WPF,Windows 10 UWP和Xamarin Forms中构建松散耦合,可维护和可测试的XAML应用程序。
可以看出PRISM并不仅仅是一个MVVM框架,他提供了一系列设计模式的实现。这听上去就很Dior了。
0x2 Run
PRISM 不再使用App.xaml来为程序设置入口,而是使用 Bootstrapper来初始化程序和启动窗口(bootstrapper在7.1中不再被推荐使用)。在 PRISM的项目中,需要删除App.xaml中的StartupUri ,因为你不再需要使用他了。
通常情况下,你的App.xaml是这样的:
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
而PRISM项目中的App.xaml是这样的:
<Application x:Class="BootstrapperShell.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BootstrapperShell">
<Application.Resources>
</Application.Resources>
</Application>
PRISM项目中,在 App.xaml.cs中重写了OnStartup 方法,让app从Bootstrapper启动:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
顺藤摸瓜,我们看一下 Bootstrapper类
using Microsoft.Practices.Unity;
using Prism.Unity;
using BootstrapperShell.Views;
using System.Windows;
namespace BootstrapperShell
{
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
}
}
Bootstrapper.cs,中的CreateShell方法来创建shell,InitializeShell初始化shell。这里的shell是宿主应用程序,就相当于是我们的主窗体程序,其他的view和module都将会被加载到shell中显示。
当然你也可以不用使用MainWindow,作为shell的窗口,可以改成任何你想要的名字,但他一定是Window类型,你还可以将他放在任何一个位置,为了将来适配MVVM思想,我们将他放在Views目录下面,以后我们所有的View都将放到这个目录下面。
那么,我们在初识WPF的时候,认识的App.g.cs呢?他里面不是有Main方法吗?我们在同样的位置找到他:
using BootstrapperShell;
using System.Windows.Shell;
namespace BootstrapperShell {
/// <summary>
/// App
/// </summary>
public partial class App : System.Windows.Application {
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
BootstrapperShell.App app = new BootstrapperShell.App();
app.Run();
}
}
}
蛤蛤,他叛变了,App.g.cs看上去更像是一个在编译的时候才会生成的中间文件,根据App.xaml.cs中的OnStartup方法来重新生成了Main方法。
从PRISM开始学WPF(二)Prism-更新至Prism7.1的更多相关文章
- 从PRISM开始学WPF,Prism7更新了什么
当时我在搬运Prism6.3的sample代码的时候,就是因为网上的资料太老旧,万万没想到这给自己挖了一个坑,因为我在做笔记的时候,prism已经在更新7.0了 现在已经是7.2了,(lll¬ω¬), ...
- 从PRISM开始学WPF(一)WPF?
从PRISM开始学WPF(一)WPF? 我最近打算学习WPF ,在寻找MVVM框架的时候发现了PRISM,在此之前还从一些博客上了解了其他的MVVM框架,比如浅谈WPF中的MVVM框架--MVVM ...
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WP ...
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator-更新至Prism7.1
原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator-更新至Prism7.1 事件聚合器EventAggregator [7.1updated]除了app部分,没 ...
- 从PRISM开始学WPF(一)WPF-更新至Prism7.1
原文:从PRISM开始学WPF(一)WPF-更新至Prism7.1 我最近打算学习WPF ,在寻找MVVM框架的时候发现了PRISM,在此之前还从一些博客上了解了其他的MVVM框架,比如浅谈WPF中的 ...
- 从PRISM开始学WPF(八)导航Navigation-更新至Prism7.1
原文:从PRISM开始学WPF(八)导航Navigation-更新至Prism7.1 0x6Navigation [7.1updated] Navigation 在wpf中并没有变化 Basic Na ...
- 从PRISM开始学WPF(番外)共享上下文 RegionContext?
原文:从PRISM开始学WPF(番外)共享上下文 RegionContext? RegionContext共享上下文 There are a lot of scenarios where you mi ...
- 从PRISM开始学WPF(八)导航Navigation?
原文:从PRISM开始学WPF(八)导航Navigation? 0x6Navigation Basic Navigation Prism中的Navigation提供了一种类似导航的功能,他可以根据用户 ...
- 从PRISM开始学WPF(二)Prism?
目录: 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Modu ...
随机推荐
- Django之META与前后端交互
Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请 ...
- 实验吧 ---- 隐写术之so beautiful so white
因为好久没有写博客,所以今天本宝宝要弥补这个过错,一下子更新许多文章,希望各位小伙伴能够原谅,以后我会加倍努力的! 这一次主要都是实验吧里面的 关于隐写术方面的知识,后续我会上传一些解密工具,希望能够 ...
- Postman----安装Newman
Newman是为Postman而生,专门用来运行Postman编写好的脚本.Newman安装步骤: 1.需要安装node.js,并配置好环境 2.打开控制台,运行:npm install -g new ...
- DCGAN 代码简单解读
之前在DCGAN文章简单解读里说明了DCGAN的原理.本次来实现一个DCGAN,并在数据集上实际测试它的效果.本次的代码来自github开源代码DCGAN-tensorflow,感谢carpedm20 ...
- UWP中实现大爆炸效果(一)
自从老罗搞出大爆炸之后,各家安卓都内置了类似功能.UWP怎么能落下呢,在这里我们就一起撸一个简单的大爆炸实现. 闲话不说,先上效果: 因为代码太多,所以我打算写成一个系列,下面是第一篇的正文: 首先, ...
- Python爬虫实践 -- 记录我的第二只爬虫
1.爬虫基本原理 我们爬取中国电影最受欢迎的影片<红海行动>的相关信息.其实,爬虫获取网页信息和人工获取信息,原理基本是一致的. 人工操作步骤: 1. 获取电影信息的页面 2. 定位(找到 ...
- Python:游戏:五子棋之人机对战
本文代码基于 python3.6 和 pygame1.9.4. 五子棋比起我之前写的几款游戏来说,难度提高了不少.如果是人与人对战,那么,电脑只需要判断是否赢了就可以.如果是人机对战,那你还得让电脑知 ...
- .netcore2.1在控制器中和类中,获取appsettings中值的方法
一般我们在开发项目中,都会从配置文件中获取数据库连接信息.自定义参数配置信息等. 在.netcore中在控制器和自定义类中,获取配置文件中参数方式如下: appsettings.json { &quo ...
- C# 接口的使用(工厂模式)
接口(interface)与抽象类(abstract)的区别: 相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法. 2.都是面向抽象编程的技术基础,实现诸多模式 不同点: 1.接口可以多 ...
- go.js remove 特定part
我想删除一个实际上是背景的部分. 假设这是我添加part的方式 myDiagram.add( scope.gj(go.Part,//此Part未绑定到任何模型数据 { layerName:“Backg ...