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是绑定不上的

posted @   Ben-Zxbin  阅读(952)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示