這篇博客將介紹在WPF項目中引入PRISM框架進行開發的一些基礎知識。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上獲取PRISM的源碼。這個系列的博客將選擇PRISM 4.1版本來講解。可以從微軟官網上下載到PRISM 4.1相關內容。將下載下來的文件解壓開:

新建一個WPF解決方案如下:

解決方案中包含兩個工程,GetStartedPrismWPF是一個WPF項目,GetStartedPrismWPF.MainModule是一個類庫項目。這兩個項目中都同時添加下面Prism相關的Dll,

在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的基礎架構做一個簡單的描述。
