WPF MVVM实战系列教程(五、Prism中的MVVM)

news/2026/1/20 14:18:51/文章来源:https://www.cnblogs.com/zhaotianff/p/19493431

🧭 WPF MVVM入门系列教程

  • 一、MVVM模式介绍
  • 二、依赖属性
  • 三、数据绑定
  • 四、ViewModel
  • 五、命令和用户输入
  • 六、ViewModel案例演示

🍠 WPF MVVM进阶系列教程

  • 一、对话框
  • 二、数据验证
  • 三、使用依赖注入(Dependency Injection)
  • 四、ViewModel通信

⌨️ WPF MVVM实战系列教程

  • 一、Prism框架介绍
  • 二、使用Visual Studio 创建Prism项目
  • 三、创建Bootstrapper/启动器
  • 四、区域导航

前言

正如前面所说,Prism框架是一个基于 WPF 的复合应用程序开发框架。Prism 实现了多项有助于编写结构良好且易于维护的 XAML 应用程序的设计模式,包括 MVVM、依赖注入、命令、事件聚合器等。

在后续的文章中,我们需要用到Prism框架里MVVM部分的知识,所以这里单独拿出来进行讲解。

在我前面的文章中,介绍过CommunityToolkit.MVVM包的使用,Prism的使用基本类似。

所以这里我不做详细介绍,只介绍如何使用,细节方面可以参考前面的文章:https://www.cnblogs.com/zhaotianff/p/16870550.html

 

ViewModelBase

在MvvmLight中,ViewModel一般都会继承自ViewModelBase类,在CommunityToolkit.Mvvm中,具有相同功能的类是ObservableObject。

在Prism中,这个类是BindableBase。BindableBase主要用于简化 MVVM 模式中 ViewModel 的属性变更通知实现,它封装了 WPF 中INotifyPropertyChanged接口的核心逻辑,让你无需重复编写属性变更通知的样板代码。

 

BindableBase主要封装了以下接口

 1  /// <summary>
 2  /// 值更改事件.
 3  /// </summary>
 4  public event PropertyChangedEventHandler PropertyChanged;
 5 
 6  /// <summary>
 7  /// 属性赋值及通知
 8  /// </summary>
 9  protected virtual bool SetProperty<T>(ref T storage, T value, Action onChanged, [CallerMemberName] string propertyName = null);
10 
11  /// <summary>
12  /// 引发PropertyChanged事件.
13  /// </summary>
14  protected void RaisePropertyChanged([CallerMemberName] string propertyName = null);
15 
16  /// <summary>
17  /// 引发PropertyChanged事件.
18  /// </summary>
19  protected virtual void OnPropertyChanged(PropertyChangedEventArgs args);

 

BindableBase使用示例

我们在界面上放置一个TextBox,然后绑定到一个属性,用于实时显示时间

MainWindow.xaml

1 <Grid>
2     <TextBox Text="{Binding CurrentTime}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,80" Width="200"></TextBox>
3 </Grid>

 

MainWindowViewModel

 1 public class MainWindowViewModel : Prism.Mvvm.BindableBase
 2 {
 3     private string currentDate;
 4 
 5     public string CurrentDate
 6     {
 7         get => currentDate;
 8         set => SetProperty(ref currentDate, value);
 9     }
10 
11     public MainWindowViewModel()
12     {
13           CurrentDate = DateTime.Now.ToString();
14     }
15 }

 

 

DelegateCommand

DelegateCommand是命令的封装类,在MVVMLight和CommunityToolkit.MVVM包中,具有相同功能的类是RelayCommand。

它们的使用方法是一样的

 

MainWindow.xaml

例如我们在界面上放置一个按钮和一个文本框,只有当文本框输入值后,单击按钮,可以显示文本框的值

1  <StackPanel>
2      <TextBox Text="{Binding MsgContent}" Width="200" HorizontalAlignment="Left" ></TextBox>
3      <Button Content="显示消息" Command="{Binding ShowMessageCommand}" ></Button>
4  </StackPanel>

 

MainWindowViewModel.cs

 1 public class MainWindowViewModel : Prism.Mvvm.BindableBase
 2 {
 3     private string msgContent;
 4 
 5     public string MsgContent
 6     {
 7         get => msgContent;
 8         set => SetProperty(ref msgContent, value);
 9     }
10 
11     public DelegateCommand ShowMessageCommand { get; private set; }
12 
13     public MainWindowViewModel()
14     {
15         ShowMessageCommand = new DelegateCommand(ShowMessage, CanShowMessageExecute);
16     }
17 
18     private void ShowMessage()
19     {
20         System.Windows.MessageBox.Show(MsgContent);
21     }
22 
23     public bool CanShowMessageExecute()
24     {
25         return !string.IsNullOrEmpty(MsgContent);
26     }
27 }

 

说明:

Prism没有提供代码生成器,所以无法使用源码生成器来快速生成属性、命令。

 

自动绑定ViewModel

在前面介绍MVVM中的Ioc时,介绍过AutoWireViewModel这种模式

https://www.cnblogs.com/zhaotianff/p/19002271

ViewModelLocator这种模式可以将ViewModel的绑定进行简化。

在Prism中,提供了ViewModelLocator.AutoWireViewModel附加属性,可以自动将ViewModel和View进行绑定。

 

使用方法如下:

1、创建界面在Views文件夹下,创建ViewModel在ViewModels文件夹下

ProjectRoot

    --ViewModels

           MainWindowViewModel.cs

    --Views

          MainWindow.xaml

 

image

 

因为这里是通过反射来查找的,所以名称不能错。 ViewModelLocator.AutoWireViewModel只能查找同级命名空间下的ViewModel。

注意:

1、Views和ViewModels文件夹都是带s结尾的

2、ViewModel的命名要跟View保持一致。例如View的命名是MainWindow,则ViewModel的命名是MainWindowViewModel;View的命名是StudentView,则ViewModel的命名是StudentViewModel。

 

2、引入prism命名空间

1   xmlns:prism="http://prismlibrary.com/"

 

3、设置 ViewModelLocator.AutoWireViewModel=true

 1 <Window x:Class="_12_Prism_MVVM_Usage.Views.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6         xmlns:prism="http://prismlibrary.com/"
 7         xmlns:local="clr-namespace:_12_Prism_MVVM_Usage"
 8         mc:Ignorable="d"
 9         prism:ViewModelLocator.AutoWireViewModel="True"
10         Title="MainWindow" Height="450" Width="800">
11     <StackPanel>
12          ......
13     </StackPanel>
14 </Window>

 

这样ViewModel就会自动绑定到对应的View上。

 

此外,AutoWireViewModel除了可以自动绑定ViewModel,它还会自动判断ViewModel的构造函数,并注入相应的实例。

 

 

 

 

ViewModel通信

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1189290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI驱动的文献管理工具在论文引用标注方面展现出强大实用性

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

2026年小型蒸汽锅炉推荐生产企业榜单:贯流式蒸汽锅炉/低氮冷凝蒸汽锅炉节能耐用型号怎么选? - 品牌推荐大师1

​ 一、行业背景与市场趋势​ 1. 小型蒸汽锅炉市场需求旺盛​ 随着工业自动化、食品加工、医疗灭菌、实验室及商业供暖等领域的发展,小型蒸汽锅炉(蒸发量≤1t/h)因其高效、节能、环保的特点,成为众多中小型企业的首…

论文引用标注的准确性可通过AI工具优化,从而提升文献管理质量

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

在科研写作中,AI支持的论文引用标注功能可大幅节省文献整理时间

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

零基础速通 breach1.0 靶机:基于蜜罐的网络安全防御保姆级实战教程

G行网络安全纵深防御体系之 蜜罐系统探索与实践 近年&#xff0c;G行持续围绕网络安全纵深防御体系开展安全防护能力建设&#xff0c;在互联网边界至数据中心内部安全区域分别部署了DDoS抗拒绝服务攻击设备、防火墙、入侵检测及响应、SSL WEB加解密、应用层WAF防御以及蜜罐系统…

借助AI技术优化论文引用标注,让文献整理过程更加轻松高效

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

重庆助听器品牌哪家强?2026最新用户体验排行榜出炉! - 深度智识库

随着山城重庆老龄化程度的加深,越来越多的家庭开始为长辈选购助听器。与追求国际大牌的趋势不同,近年来,一批扎根重庆社区、服务贴心周到的本土验配机构正凭借其出色的本地化服务赢得口碑。用户在选择时,核心应关注…

网络安全等级保护:什么是网络安全等级保护?(非常详细)零基础入门到精通,收藏这一篇就够了

关键词&#xff1a; 网络安全等级保护 等级保护 网络 信息系统旧话重提&#xff0c;一直以来&#xff0c;我们不断强调“等级保护”制度是我国的网络安全领域的基本制度、基本策略和基本方法&#xff0c;是促进信息化健康发展&#xff0c;维护国家安全、社会秩序和公共利益的根…

新型管道怎么选?2026年推荐这些供应商,管件管道实力厂家找哪家 - 品牌推荐师

在工业管道系统向高压化、集成化、智能化演进的趋势下,管道供应商的技术实力与产品适配性已成为影响企业项目效率与安全的核心指标。据中国工业管道协会2025年最新数据显示,高压管道系统故障中,因供应商资质不全或产…

高效管理学术文献的关键在于利用AI优化论文引用标注方式

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

2025 色谱耗材品牌 / 厂家大全:口碑榜 + 性价比排行,选型不再纠结 - 品牌推荐大师1

2025 年中国色谱耗材市场规模突破 250 亿元,年复合增长率达 14.5%,制药质控、环境监测、食品安全等领域需求持续爆发。面对全球 60 亿美元的庞大市场,实验室采购却陷入两难:国际品牌(安捷伦、沃特世等)性能稳定但…

2025年国内有实力的尘埃粒子计数器工厂推荐榜,0.1um尘埃粒子计数器/激光尘埃粒子计数器/台式粒子计数器工厂排名 - 品牌推荐师

随着半导体、生物医药、精密制造等行业的洁净度标准持续升级,尘埃粒子计数器作为关键环境监测设备,其技术精度与可靠性直接影响生产质量。据第三方机构统计,2024年国内洁净室市场规模突破300亿元,带动粒子计数器需…

论文引用标注的重要性不可忽视,AI工具能大幅提升文献管理效率

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

Qt的技巧笔记(一):Qt的QComboBox与自定义的枚举类型的遍历绑定

枚举类型`enum`通常用于定义一组固定的常量值,在Qt开发中,`QComboBox`控件中使用枚举值来设置或获取当前中的选项。如果你想要遍历一个枚举类型,比如在`QComboBox`中填充所用枚举值,你需要先定义枚举,然后利用Qt的…

专著多少字才能出版?

专著最低多少字才能出版&#xff1f;个人专著一般多少字合适&#xff1f;下面淘淘学术来回答作者的这个疑问。一、专著出版的最低字数要求如果是纯文字的书稿&#xff0c;里面只有很少的图。这种情况下&#xff0c;4-5万字都是可以出版的。淘淘学术去年就帮助几个作者出版了10万…

WPF MVVM实战系列教程(四、Prism中的依赖注入)

🧭 WPF MVVM入门系列教程一、MVVM模式介绍 二、依赖属性 三、数据绑定 四、ViewModel 五、命令和用户输入 六、ViewModel案例演示🍠 WPF MVVM进阶系列教程一、对话框 二、数据验证 三、使用依赖注入(Dependency In…

现代AI工具在论文引用标注方面表现优异,极大简化文献管理流程

论文引用标注排名&#xff1a;AI工具如何帮你高效管理文献 工具名称 核心功能 效率评分 适用场景 AiBiYe 智能引用格式转换 ★★★★☆ 多格式引用需求 AiCheck 引用查重与合规检测 ★★★★ 避免学术不端 AskPaper 文献内容智能提取 ★★★★ 快速理解文献核心…

发一篇SCI论文多少钱?

发一篇SCI论文多少钱&#xff1f;SCI市场价多少钱一篇&#xff1f;很多作者不知道SCI论文发表的版面费&#xff0c;下面淘淘论文来回答作者的这个疑问。一、SCI论文发表相关费用SCI论文发表费用的基本构成&#xff1a;SCI论文翻译费用、润色费用、OA期刊版面费、SCI论文全程辅导…

全网最全网络安全入门指南,零基础从入门到精通,看这一篇就够了!_网络安全指南

什么是网络安全&#xff1f; 网络安全是指采取措施&#xff0c;确保计算机系统、网络和数据的机密性、完整性和可用性&#xff0c;以防止未经授权的访问、破坏或泄露。网络安全可以分为以下主要领域&#xff1a; 网络防御和安全设备管理&#xff1a; 这个领域关注如何设置和管理…

废旧织物回收箱远程监控管理系统方案

行业背景随着我国“双碳”战略的深入推进和“无废城市”建设的全面展开&#xff0c;废旧纺织品&#xff08;织物&#xff09;的回收再利用已成为循环经济的重要组成部分。据统计&#xff0c;我国每年产生数千万吨的废旧纺织品&#xff0c;但目前的规范化回收率仍不足20%。大量废…