概述
如果你在開發wpf程式,應該聽說過The Composite Application Guidance for WPF(以下簡稱prism)
總而言之,prism是協助你開發複雜的wpf應用程式的。希望在看完此系列教程以後能對你有所協助.
從去年正式版發布至今,將近快半年了.silverlight 2正版的推出.prism也開始支援silverlight,而且這次是同時支援wpf和silverlight.這樣便統一了wpf和silverlight的編程,代碼的移植也更加的方便.現在prism最新的版本是Prism V2 - Drop 8.相對於第一個版本發生了一些變化.本文則基於Prism V2 - Drop 8這個版本進行介紹.如果你還在用7月份的那個版本可以看周銀輝寫的教程.
以下說明三個最基礎的概念.
一.被引導的Windows表單Shell
wpf程式在啟動時,需要一個宿主容器,一般情況下是System.Windows.Window,以下是一個剛建立的表單.
<Window x:Class="HelloWorldSample.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> </Grid></Window>
預設情況下,System.Windows.Application會通過設定StartupUri來運行主表單.
<Application x:Class="HelloWorldSample.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window1.xaml"></Application>
接著隨著prism架構的加入,運行主表單的方式改變了.因為prism要在表單運行之前做一堆事情,來為架構可以做的事情做鋪墊.所以我們要去掉StartupUri,手動啟動表單. prism通過一個名為Bootstrapper類作為引導程式,這裡我們先不管他做了什麼,只知道他起了程式的引導作用.
通過Bootstrapper的引導,這個表單就不再僅僅是一個單純的表單了,這個表單我們也可以稱為Shell,也可以理解為一個殼的意思.
二.被附加的內容地區Region
以asp.net中的主版頁面為例.
我們做網站之前總要先布局,那就得定模板,大家應該很熟悉,目的就是以主版頁面當容器,然後在定義的ContentPlaceHolder地區中塞內容.
一般情況下,定義了主版頁面以後,必定要其他Page來套用此主版頁面
這種做法本身很好,用wpf程式來實現也可以實現(可以參考此文),但比較麻煩.web程式與用戶端程式有一個本質的區別,web是無狀態的,用戶端程式就沒有這方面的問題.
假設web是有狀態的(假設哦),可以以使用者控制項替代,以aspx頁面為主版頁面,照樣定義容器,往裡面塞使用者控制項.
這種做法,現在的ajax程式應該很流行.
回到主題,prism架構通過附加屬性的方式給Shell定義自訂地區,標題說是附加的內容地區,如下代碼,
通過附加屬性的方式給ItemsControl定義了一個Region,ItemsControl就變成這個Region的容器了.
這裡的Region與asp.net主版頁面的ContentPlaceHolder的意義是相同的,只不過實現方式不同罷了.
<Window x:Class="HelloWorldSample.Shell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.codeplex.com/CompositeWPF" Title="Composite Application Library Sample" Width="400" Height="300"> <ItemsControl cal:RegionManager.RegionName="MainRegion"/></Window>
注意:在這裡通過RegionManager附加屬性RegionName註冊的地區的功能,是在該表單執行個體化之前,通過Bootstrapper提供的,這就是上面的鋪墊作用.
三.被拆分的模組Module
定義好Region內容地區以後,可以在Region中載入不同的模組的使用者控制項.每個模組都有著不同功能,一個功能強大的應用程式就是由不同的模組組成的.將應用程式的不同功能,拆分成不同的小模組開發,複雜度明顯就會降低.
好,到了這裡講明了三個點
1.Shell,主應用程式容器,prism功能的基石
2.Region,我們且稱之為內容地區,可以提供各個模組載入所需的視圖(即使用者控制項)
3.Module,程式的組成模組.
有了以上三個概念以後,我們便可以開始prism之旅了,如果你對以上概念還不是很清晰,沒有關係。以後會慢慢介紹.已經在用此架構的朋友,發現寫錯了請指出.下篇讓我們一起來探索Region的使用。
http://www.cnblogs.com/Clingingboy/archive/2009/01/06/prism_part1.html