C#WPF中Prism的區域化與模塊化----------個人筆記


如果需要 登錄窗口 之后返回什么樣的值的
那就不能使用 事件總線(事件聚合器)

要在App.Xaml.cs 窗口 寫一個 初始化窗口的地方 先進行初始化 登錄窗口
之后根據返回的狀態進行主窗口的加載
代碼:
protected override void InitializeShell(Window shell)
{
base.InitializeShell(shell);
}


區域化管理:
定義 / 導航 / 視圖加載
就先找個東西給我們需要放入的地方占個位
占位之后就由prism 框架給我們指定一個東西 根據代碼 動態加載進去
動態加載的好處: 可以條件性的控制 把一個窗口 划分成各個功能區

模塊化功能開發
降低耦合度
定義=> 注冊 => 發現=> 加載 => 初始化

這些方法是針對UserControl的
區域化: 我們把一個 頁面分成 左右兩邊
我們現在需要把右邊的 給他占個位 (不是所有東西都可以占位的)
第一步:
可以使用 ContentControl 來進行占位 之后還需要用到prism里面的一個 屬性 來進行取名
代碼:
<ContentControl Grid.Column="1" prism:RegionManager.RegionName="ContentRegion"/>

第二步 左邊是導航欄的 時候 一樣寫一個 RegionName 之后在 導航欄的 View里面添加一個 button
之后在導航欄的 ViewModel 那邊進行一個 Icommand 綁定事件 進行加載 右邊的 內容欄
怎么進行加載? 這個區域 這個 右邊的內容欄 是在MainWindow內部的 必須得等MainWindow初始化之后
才可以加載 所以不能在App.Xaml.cs 那邊進行加載
要在MainWindow.Xaml.cs 那邊進行加載 但是 MainWindow.XMAL.cs 加載就等於是在 MainWindowViewModel處加載
那就是在MainWindowViewModel 的構造函數 進行加載
代碼:
public MainWindowViewModel(IEventAggregator ea,IDialogService dialogService, IRegionManager regionManager)
{
});
//讓某一個視圖 跟我這個區域發生關系 有什么聯系就從這邊顯示
regionManager.RegisterViewWithRegion("MenuRegion", "MenuView");
}
MenuRegion:頁面定義的區域的名字 RegionName/
MenuView : 在App.xaml.cs頁面的 RegisterTypes進行注冊
代碼: containerRegistry.RegisterForNavigation<MenuView>(); //進行注冊 名字如果沒有指定就默認等於類名

切換頁面的按鈕 可以動態生成頁面 可以用 CommandParameter 來進行傳參動態生成
UI代碼:<Button CommandParameter="ContentView" Content="打開加載頁面" Height="30"
VerticalAlignment="Top" Margin="20" Command="{Binding OpenCommand}"/>

用CommandParameter傳給ViewModel 綁定的OpenCommand的參數 傳進去 之后 使用
在構造函數 注入的 接口IRegionManager 的方法 RequestNavigate進行動態生成

ViewModel代碼:
IRegionManager _regionManager;
public MenuViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
}
public ICommand OpenCommand
{
get => new DelegateCommand<object>(obj=>{
//執行加載頁面的操作
_regionManager.RequestNavigate("ContentRegion", obj.ToString());
}); }

在TabControl中會有 導航欄 如何使這個導航欄綁定我們想要的數值 // 或者名字
創建一個 window.Resources 用style的方式來 做 TabItem的 Header導航欄的綁定
代碼 :<Window.Resources>
<Style TargetType="TabItem" x:Name="TabItemContent">
<Setter Property="Header" Value="{Binding DataContext.Title}"/>
</Style>
</Window.Resources> 必須綁定 DataContext.Title 如果只是單純綁定 Title是綁定不上的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM