WPF中CommunityToolkit.Mvvm.dll的简单使用

news/2025/3/20 9:59:38/文章来源:https://www.cnblogs.com/weber-zheng/p/18782424

1.通过Nuget安装 CommunityToolkit.Mvvm库

Install-Package CommunityToolkit.Mvvm

2.新建2个ViewModel通过Messenger进行通信

  • 主界面的ViewModel
public class MainWindowViewModel : ObservableObject,IRecipient<UserLoginMessage>
{private string receiveMsg = string.Empty;public string ReceiveMsg{get { return receiveMsg; }set { receiveMsg = value; OnPropertyChanged(); }}public IRelayCommand<string> ExecuteCommand { get; private set; }public MainWindowViewModel(){ExecuteCommand = new RelayCommand<string>(ExecuteAction);//注册WeakReferenceMessenger.Default.Register<UserLoginMessage>(this);}~MainWindowViewModel(){//注销消息注册(弱引用可不使用)WeakReferenceMessenger.Default.Unregister<Student>(this);}//View中按钮点击命令private void ExecuteAction(string? actionName){if (actionName == "MainToSend"){WeakReferenceMessenger.Default.Send(new Student { Name = "Stan", Age = 18 });}}//接收数据public void Receive(UserLoginMessage message){ReceiveMsg = message.User;}
}
  • 用户控件的ViewModel
 public class SubViewModel : ObservableObject{private string _receive = string.Empty;public string Receive{get { return _receive; }set { _receive = value; OnPropertyChanged(); }}public IRelayCommand<string> ExecuteCommand { get; private set; }public SubViewModel(){ExecuteCommand = new RelayCommand<string>(ExecuteAction);//第二种Message注册方式WeakReferenceMessenger.Default.Register<Student>(this, (r, m) =>{//接收数据Receive = m.Name;});}~SubViewModel(){//注销消息注册(弱引用可不使用)WeakReferenceMessenger.Default.Unregister<Student>(this);}private void ExecuteAction(string? actioName){if (actioName == "SubToMain"){WeakReferenceMessenger.Default.Send(new UserLoginMessage { User = "Admin" });}}}

3.使用的Model如下:

 public class Student{public string Name { get; set; } = string.Empty;public int Age { get; set; }}public class UserLoginMessage
{public string User { get; set; } = string.Empty;}

4.总结

  • 总体的使用和Prsim中的事件聚合器类似
  • Prism事件聚合器订阅时默认是弱引用,可使用过滤器

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

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

相关文章

跑酷P2 移动有害和切换关卡

跑酷游戏 第二集 本集中我们对上一集中的移动问题进行了优化,并且制作了关卡切换功能。 移动优化 上一集中,我们留下了一些移动方面的问题。首先是连跳问题,角色在空中可以不受限制的跳跃,我们需要解决一下。新建一个私有变量正在跳跃,用来存放角色跳跃的状态。在游戏开始…

跑酷P6 过关功能

跑酷游戏 第六集 本集我们实现了完成关卡的功能,并且修复了重新开始游戏后物资的bug。 角色绘制和显示逻辑 我们复制一下我们的物资角色,重命名为出口。然后绘制两个造型,一个是出口关闭的造型,一个是出口打开的造型。然后到我们的代码部分。我们的出口代码和物资角色的代码…

跑酷P6 关卡和金币系统

塔防游戏 第六集 本集主要实现了游戏的关卡处理和金币系统。 关卡处理 绘制一个开始按钮放置在画面左上方。我们希望在游戏开始时,或者一波关卡结束之后可以点击这个按钮,生成新一个关卡的敌人。我们新建一个全局变量关卡。游戏开始时关卡默认为0,每次开启一个新的关卡让这个…

跑酷P5 收集物资

跑酷游戏 第五集 本集我们实现了搜集物资的功能。 移动和复制 首先我们复制一遍场景角色,然后清空造型。复制的原因是我们移动和显示部分的代码逻辑,物资和场景是一样的。 然后我们来重新绘制造型。这里我们可以用自己喜欢的造型,金币,水果,宝石等都可以。这里我按视频的做…

读DAMA数据管理知识体系指南25数据集成活动

读DAMA数据管理知识体系指南25数据集成活动1. 规划和分析 1.1. 数据集成和互操作涉及在什么时间、什么地点、以什么方式能获得数据 1.2. 定义数据集成和生命周期需求1.2.1. 定义数据集成需求涉及理解组织的业务目标,以及为实现这些目标而需要的数据和建议的技术方案1.2.2. 数据…

塔防P9/P10 激光炮台和游戏结束判定

塔防游戏 第九/十集 这两集我们完成了一个新炮台——激光炮台,以及敌人碰到地图边缘扣除生命值导致游戏结束的功能。 绘制炮台 在炮台角色中绘制炮台的图片并复制到图标一份,绘制炮台不可选中的图标和炮台的开火动画。我们设计激光炮台的开火前有短时间的蓄力过程,我们需要两…

AI模型页面可视化

这里使用 ollama-webui-lite 进行可视化。 项目地址:https://github.com/ollama-webui/ollama-webui-lite 将项目拉取到本地后,在命令行终端访问该项目, 1.先执行 npm ci 进行依赖的安装。 2.再执行 npm run dev 运行项目打开http://localhost:3000/即可进入可视化页面。 …

塔防P8 多炮台种类设置

塔防游戏 第八集 本集主要完成了新炮塔种类的添加,以及对多个炮台种类的设置。 造型绘制 首先绘制一个新炮台。我们要制作的是双管炮台,功能是在普通炮台的基础上一次瞄准可以攻击两次。我们绘制新的炮台图标,开炮动画和不可放置动画,图标再复制到商店的图标角色中一份。注…

20241917 2024-2025-2《网络攻防实践》第三次作业

1.知识点梳理与总结 1.1实验要求 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? (2)动手实践Wireshark 使用Wireshark开源软件对…

NocoBase 本周更新汇总:优化表格区块的列和操作

本周更新包括:表格区块支持配置隐藏最左侧序号和选择列,支持在联动规则配置可选项字段选项等。原文链接:https://www.nocobase.com/cn/blog/weekly-updates-202503020 汇总一周产品更新日志,最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支…