Region是Prism當中模塊化的核心功能。Region可以理解為View的動態占位符,在View上進行視圖占位,其主要目的是弱化模塊與模塊之間的耦合關係。 ...
Region概述
Region是Prism當中模塊化的核心功能。Region可以理解為View的動態占位符,在View上進行視圖占位,其主要目的是弱化模塊與模塊之間的耦合關係。
在一般的界面設計中,界面上的元素及內容往往是被固定,如上圖。
- Header區域放置ToolBar
- Menu 區域放置ListBox
- Content 區域放置ContentControl
這使得各個區域的內容被固定下來,不能直接對該區域的元素或內容進行替換。在Prism當中,可以將頁面區域定義為Region,此時可以通過修改Region設置,使得頁面區域展示的內容不再固定,可以動態分配區域所展示的內容。
此時Region的功能類似於一個視圖容器,可以通過設置將視圖界面放到Region中,實現視圖的管理
Region的使用
Region使用思路
- 創建視圖
- 定義Region
- 註冊視圖
一般在Prism項目中,將視圖放在Views文件夾,Region的定義在主窗體,Region視圖的註冊在ViewModels文件夾。
1.視圖創建
- 視圖創建時,要選擇UserControl
- 編寫簡單的測試視圖
<Grid Background="Yellow">
<TextBlock
Text="UserControlTempA"
FontSize="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
2.Region定義
Region的定義可以使用XAML或代碼創建定義Region:
XAML中定義:
通過prism:RegionManager.RegionName="[RegionName]"
對Region進行定義,此時可以直接通過RegisterViewWithRegion
將視圖註冊到Region當中。
- MainWindow.xaml
<ContentControl prism:RegionManager.RegionName="WorkRegion1" />
代碼中定義:
在代碼中定義需要通過x:Name
為控制項定義名稱,再在代碼中通過SetRegionName
對Region進行定義
- MainWindow.xaml
<ContentControl x:Name="Control2" />
- MainWindow.xaml.cs
//設置Region名稱,將Control2控制項對應Region名稱設置為"WorkRegion2"
RegionManager.SetRegionName(Control2, "WorkRegion2");
註:
-
RegionName 一定要是唯一的
-
代碼中可以直接調用
Control2
是由於
項目代碼:
- MainWindow.xaml
- MainWindow.xaml.cs
小結:
代碼中定義時將Region名稱定義放到了代碼之中,通過XAML中的x:Name
進行聯結
在XAML中定義通過prism:RegionManager.RegionName="[RegionName]"
對Region進行定義,一步到位;在查看視圖時更方便確定哪些是Region,個人更加推薦在XAML中進行Region定義。
3.視圖註冊
對Region定義後,還需要將視圖註冊到Region中才可以使用。
Region的定義時通過regionManager
來實現的,此時要將regionManager
傳入MainWindowViewModel
,通過RegisterViewWithRegion
將視圖註冊到Region當中。
public MainWindowViewModel(IRegionManager regionManager)
{
//Prism框架內依賴註入的RegionManager
RegionManager = regionManager;
//在WorkRegion1中註冊UserControlTempA視圖
RegionManager.RegisterViewWithRegion("WorkRegion1", typeof(UserControlTempA));
//在WorkRegion2中註冊UserControlTempA視圖
RegionManager.RegisterViewWithRegion("WorkRegion2", typeof(UserControlTempA));
}