天天看點

WPF PRISM開發入門一( 初始化PRISM WPF程式)

原文: WPF PRISM開發入門一( 初始化PRISM WPF程式) 這篇部落格将介紹在WPF項目中引入PRISM架構進行開發的一些基礎知識。目前最新的PRISM的版本是Prism 6.1.0,可以在 Github 上擷取PRISM的源碼。這個系列的部落格将選擇PRISM 4.1版本來講解。可以從 微軟官網 上下載下傳到PRISM 4.1相關内容。将下載下傳下來的檔案解壓開:

WPF PRISM開發入門一( 初始化PRISM WPF程式)
建立一個WPF解決方案如下:
WPF PRISM開發入門一( 初始化PRISM WPF程式)
解決方案中包含兩個工程,GetStartedPrismWPF是一個WPF項目,GetStartedPrismWPF.MainModule是一個類庫項目。這兩個項目中都同時添加下面Prism相關的Dll,
WPF PRISM開發入門一( 初始化PRISM WPF程式)

在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。

此時運作這個項目,運作效果如下:

WPF PRISM開發入門一( 初始化PRISM WPF程式)

這個時候我們來對PRISM的基礎架構做一個簡單的描述。

Shell: 頂級視窗,就像一個空蕩蕩的舞台,Shell本身不包含内容,他的功能都是通過Module來實作的;

Bootstrapper: 應用程式的入口點,就像一個工廠的排程,需要完成很多協調事情;

Region: 内容區域,類似于一個占位符,先把坑占了,至于上面的蹲坑的人是可以換的;

Module: 真正實作業務功能的東西,是View,資料,模型組成的集合,一個應用程式中可以根據複雜程度分很多Module;

用一個電影院來舉例子:Shell就是一個劇院,裡面空空蕩蕩的演出廳就是Region,Bootstrapper就是劇場營運部門,安排演出機關的引入和演出安排及演出廳之間的資源協調;Module就是各個演出劇。

感謝您的閱讀!代碼點選

這裡

下載下傳。