原文: WPF PRISM開發入門一( 初始化PRISM WPF程式) 這篇部落格将介紹在WPF項目中引入PRISM架構進行開發的一些基礎知識。目前最新的PRISM的版本是Prism 6.1.0,可以在 Github 上擷取PRISM的源碼。這個系列的部落格将選擇PRISM 4.1版本來講解。可以從 微軟官網 上下載下傳到PRISM 4.1相關内容。将下載下傳下來的檔案解壓開:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYTOjRTN1czM4YTMzcjNwQmY1EjYjFTZkVmN2kjNwIGNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
在GetStartedPrismWPF.MainModule類庫中需要額外引用PresentationCore,PresentationFramework,ReachFramework,System.Xaml這4個WPF相關的類庫。
GetStartedPrismWPF工程中删除MainWindow.xaml檔案,建立一個Shell.xaml窗體檔案,XAML代碼如下:
<Window x:Class="GetStartedPrismWPF.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://www.codeplex.com/prism"
xmlns:local="clr-namespace:GetStartedPrismWPF"
mc:Ignorable="d"
Title="GetStarted Prism for WPF" Height="300" Width="300">
<Grid>
<ContentControl prism:RegionManager.RegionName="MainRegion"/>
</Grid>
</Window>
添加一個PrismGetStartedBootstrapper類,代碼如下:
using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.Prism.UnityExtensions;
using System.Windows;
namespace GetStartedPrismWPF
{
public class PrismGetStartedBootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return this.Container.TryResolve<Shell>();
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Window)this.Shell;
Application.Current.MainWindow.Show();
}
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(MainModule.GetStartedPrismWPFMainModule));
}
}
}
打開App.xaml檔案,删除StartupUri的代碼,在背景代碼中添加:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
PrismGetStartedBootstrapper bootstrapper = new PrismGetStartedBootstrapper();
bootstrapper.Run();
}
上面兩段代碼的意思是将主窗體設定為Shell窗體。
下面看GetStartedPrismWPF.MainModule中的代碼,建立一個UserControl,命名為GetStartedPrismView,XAML代碼如下:
<UserControl x:Class="GetStartedPrismWPF.MainModule.Views.GetStartedPrismView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:GetStartedPrismWPF.MainModule.Views"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="Prism for WPF Getstarted" FontSize="16" />
</Grid>
</UserControl>
很簡單,就一句話顯示一段文字。建立一個GetStartedPrismWPFMainModule,內建自IModule,
public class GetStartedPrismWPFMainModule : IModule
{
private readonly IRegionViewRegistry regionViewRegistry;
public GetStartedPrismWPFMainModule(IRegionViewRegistry registry)
{
this.regionViewRegistry = registry;
}
public void Initialize()
{
regionViewRegistry.RegisterViewWithRegion("MainRegion", typeof(Views.GetStartedPrismView));
}
}
這裡會把GetStartedPrismView這個UserControl注冊到MainRegion這樣一個占位符上,而這個占位符在WPF工程中Shell窗體XAML代碼中出現過,在Shell中,我們先定義好這樣一個占位符,後續可以對他填充Module。
此時運作這個項目,運作效果如下:
這個時候我們來對PRISM的基礎架構做一個簡單的描述。
Shell: 頂級視窗,就像一個空蕩蕩的舞台,Shell本身不包含内容,他的功能都是通過Module來實作的;
Bootstrapper: 應用程式的入口點,就像一個工廠的排程,需要完成很多協調事情;
Region: 内容區域,類似于一個占位符,先把坑占了,至于上面的蹲坑的人是可以換的;
Module: 真正實作業務功能的東西,是View,資料,模型組成的集合,一個應用程式中可以根據複雜程度分很多Module;
用一個電影院來舉例子:Shell就是一個劇院,裡面空空蕩蕩的演出廳就是Region,Bootstrapper就是劇場營運部門,安排演出機關的引入和演出安排及演出廳之間的資源協調;Module就是各個演出劇。
感謝您的閱讀!代碼點選
這裡下載下傳。