WPF-Prism学习笔记之 “导航功能和依赖注入“

新建空白模板(Prism)

新建好后会有自动创建ViewModels和Views

在"MainWindow.xaml"文件里面标题去绑定了一个属性"Title",而"MainWindowViewModel.cs"里面继承一个非常重要的"BindbleBase"(prism框架里面非常重要的)。所以我们直接运行界面就会显示Title的文字信息

往下看

在"MainWindow.xaml"文件里面还有这样一段内容,这里就表示

你定义了一个名字叫 ContentRegion 的区域,后边你注册的界面就会绘制到这个区域。

复制代码
 <Grid>
     <Grid.ColumnDefinitions>
         <ColumnDefinition/>
         <ColumnDefinition/>
     </Grid.ColumnDefinitions>
     
     <Grid.RowDefinitions>
         <RowDefinition/>
         <RowDefinition/>
     </Grid.RowDefinitions>
     
     <ContentControl Grid.Row="1" Grid.Column="1" prism:RegionManager.RegionName="ContentRegion" />
 </Grid>

稍微添修改一下把界面Grid分成2行2列,并且把定义的区域放在 第二行二列里面(Grid.Row="1" Grid.Column="1" )

复制代码
     private string _title = "Prism Application";
     public string Title
     {
         get { return _title; }
         set { SetProperty(ref _title, value); }
     }
     private readonly IRegionManager _regionManager;
     public DelegateCommand<string> DelegateCommand_Open { get; private set; }
     public MainWindowViewModel(IRegionManager contentRegion)
     {
         _regionManager = contentRegion;
         DelegateCommand_Open = new DelegateCommand<string>(OPen);
     }

     private void OPen(string obj)
     {
         // viewName 可能是 "HomeView", "SettingsView", "AboutView" 等
         if (!string.IsNullOrEmpty(obj))
         {
             // 导航到 ContentRegion 中指定的视图
             _regionManager.RequestNavigate("ContentRegion", obj);
         }
     }

而"MainWindowViewModel.cs"里面我们定义了一个 DelegateCommand<string> DelegateCommand_Open 可以接收一个 string 参数的命令。斌且在构造函数里面 引入一个接口IRegionManager contentRegion 是为了拿到我们通过接口注入的东西。

我这里定义了一个用户控件,并且在界面上面放了一个,TEXT方便显示效果

在APP.XML.CS里面我加了这样一个注入 这样就代表我们手动绑定 Form_1 和上下文 MainWindowViewModel 这里要解释一下为什么手动绑定这个 因为之前我们在MainWindowViewModel 里面的构造函数里面绑定了下面两个 我们注册的regionManager 就可以通过接口拿到

复制代码
public MainWindowViewModel(IRegionManager contentRegion)
     {
         _regionManager = contentRegion;
         DelegateCommand_Open = new DelegateCommand<string>(OPen);
     }

再通过 _regionManager.RequestNavigate("ContentRegion", obj); 去绘制到ContentRegion指定的区域 绘制的内容是通过我们注册的名称 也就是 Form_1

我们去给绑定一下

这样就实现了点击按钮就会把参数传入到 binding绑定的方法里面 我们binding绑定的是open方法

也就是我们把Form_1 传入到了Open方法里面然后通过 _regionManager.RequestNavigate("ContentRegion", obj);向指定区域中导航一个视图

点击按钮运行效果

我们看到的这种也是通过基础的导航绑定注册来实现的

英语比较差记一下:

IRegionManager :"通过引入这个接口可以拿到我们在 App.xaml.cs 里面注册的窗体

DelegateCommand: 给XML界面提供属性绑定的 这个命令去绑定一个方法,按钮或者其他触发后就会去调用这个命令所绑定的方法可以带参数.

regionManager.RequestNavigate:向指定区域中导航一个视图,它告诉 Prism:"请把某个已经注册的视图加载进这个区域中

<ContentControl prism:RegionManager.RegionName="ContentRegion"/>:我们在界面上放置了一个区域,名字叫 ContentRegion。

相关推荐
敲个大西瓜11 小时前
langchain笔记(一)
redis·笔记·langchain
带金箍的至尊宝11 小时前
系统架构设计师笔记 05:第2章硬件与软件基础,冯诺依曼结构怎么考
数据库·笔记·系统架构
知产xiao_xin12 小时前
商标权的内容和限制
经验分享·笔记·知识产权
陈年老古董12 小时前
Hive 函数学习笔记(上):单行函数与炸裂函数
hive·笔记·学习
喜欢打篮球的普通人12 小时前
MiniMind 学习笔记(十八):速通强化学习——从 MDP 到 PPO 的概念与算法地图
笔记·深度学习·学习
志尊宝13 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记
海绵宝宝转agent13 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi01114 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
yi01114 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
北风toto14 小时前
数据库笔记:Armstrong 公理系统与集合论的深度辨析
数据库·笔记