CommunityToolkit.Mvvm8.1 消息通知(4)

这篇具有很好参考价值的文章主要介绍了CommunityToolkit.Mvvm8.1 消息通知(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本系列文章导航
  1. https://www.cnblogs.com/aierong/p/17300066.html
  2. https://github.com/aierong/WpfDemo (自我Demo地址)

 文章来源地址https://www.toymoban.com/news/detail-413190.html

希望提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:https://www.cnblogs.com/aierong

 

说明

为了应用程序的不同模块分离,减少模块之间引用,CommunityToolkit.Mvvm提供了消息通知功能,可以方便模块之间数据传递。

 

发送消息

方法:WeakReferenceMessenger.Default.Send

官方推荐用ValueChangedMessage封装数据传递

//Send发送消息
WeakReferenceMessenger.Default.Send<string>( "qq1" );

//特别注意:直接传递值,只可以是引用类型,值类型不可以编译成功的(例如:下面2句不行)
//WeakReferenceMessenger.Default.Send<int , string>( 11 , "token_1" );
//WeakReferenceMessenger.Default.Send<bool , string>( true  , "token_1" );

//上面这样也是可以的,但是官方推荐用ValueChangedMessage封装数据传递
WeakReferenceMessenger.Default.Send<ValueChangedMessage<string> , string>( new ValueChangedMessage<string>( "UserControlLeftViewModel发来的qq1" ) , "token_1" );

建议发送消息时都带上token名称,这样方便订阅接收方过滤数据 

WeakReferenceMessenger.Default.Send<ValueChangedMessage<string> , string>( new ValueChangedMessage<string>( "UserControlLeftViewModel发来的qq1" ) , "token_1" );

 

发送消息传递对象

    public class MyUserMessage
    {
        public string UserName
        {
            get; set;
        }

      

        public int Age
        {
            get; set;
        }
    }
//Send发送 一个复杂数据 
var _data1 = new MyUserMessage() { Age = 18 , UserName = "qq" };
           
WeakReferenceMessenger.Default.Send<ValueChangedMessage<MyUserMessage> , string>( new ValueChangedMessage<MyUserMessage>( _data1 ) , "token_class" );

 

发送消息并有返回响应值

    /// <summary>
    /// 必须继承RequestMessage  RequestMessage<string>代表返回数据的类型是string
    /// </summary>
    public class MyMessage : RequestMessage<string>
    {
        public string Datas;

        public int Ids;
    }
            //result接收返回的值
            //MyMessage这个类必须继承RequestMessage
            var _data2 = new MyMessage() { Datas = "qqq" , Ids = 100 };
            var result1 = WeakReferenceMessenger.Default.Send<MyMessage , string>( _data2 , "token_Response" );
            if ( result1 != null )
            {
                //获取到 返回的值
                var val = result1.Response;

                Name = val;

            }

 

 

接收订阅消息

接收2种方式:

方式1.继承ObservableRecipient  

方式2.实现接口IRecipient

方式1比方式2灵活,推荐使用方式1

 

接收方记得设置IsActive=true,才可以收到消息

我们在vm的OnActivated中接收消息数据

        [ObservableProperty]
        private string name = "hello";

        public UserControlTopViewModel ()
        {
            //注意这样要写,才可以接听
            IsActive = true;
        }
        protected override void OnActivated ()
        {
            //Register<>第一个类型一般是自己的类型,第2个是接收数据的类型
            //Register方法第1个参数一般是this,第2个参数是一个方法,可以获取接收到的值
            Messenger.Register<UserControlTopViewModel , string>( this , ( r , message ) =>
            {
                Name = Name + "  收到msg:" + message;
            } );

            //Register<>第一个类型一般是自己的类型,第2个是接收数据的类型,第3个是token数据的类型
            //Register方法第1个参数一般是this,第2个参数是token,第3个参数是一个方法,可以获取接收到的值
            //Messenger.Register<UserControlTopViewModel , string , string>( this , "token_1" , ( r , message ) =>
            //{

            //    Name = Name + "  收到msg:" + message;
            //} );
            //ValueChangedMessage<string>                  
            Messenger.Register<UserControlTopViewModel , ValueChangedMessage<string> , string>( this , "token_1" , ( r , message ) =>
            {

                Name = Name + "  收到msg:" + message.Value;
            } );



            //Messenger.Register<UserControlTopViewModel , MyUserMessage , string>( this , "token_class" , ( r , user ) =>
            //{
            //    Name = Name + "  收到msg:" + user.UserName + user.Age;
            //} );
            Messenger.Register<UserControlTopViewModel , ValueChangedMessage<MyUserMessage> , string>( this , "token_class" , ( r , user ) =>
            {
                Name = Name + "  收到msg:" + user.Value.UserName + user.Value.Age;
            } );


            Messenger.Register<UserControlTopViewModel , MyMessage , string>( this , "token_Response" , ( r , message ) =>
            {
                Name = Name + "  收到msg:" + message.Datas;

                //Reply是答复 ,这样可以返回值
                message.Reply( "UserControlTopViewModel给你返回值" );      

            } );
        }

 

自我Demo地址:

https://github.com/aierong/WpfDemo/tree/main/WpfDemoNet6/MessengerDemo

 

到了这里,关于CommunityToolkit.Mvvm8.1 消息通知(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong 出处:https://www.cnblogs.com/aierong     CommunityToolkit.Mvvm包不提供ioc功能,但是官方建议使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    浏览(49)
  • CommunityToolkit.Mvvm8.1 viewmodel源生成器写法(3)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong 出处:https://www.cnblogs.com/aierong   CommunityToolkit.Mvvm8.1最令人惊喜的是它提供的源生成器功能,它极大简化我们的mvvm代码

    2023年04月11日
    浏览(37)
  • CommunityToolkit.Mvvm 加速 MVVM 开发

    为保文字描述的准确性,文章中的文字描述信息多为引用官方。 依赖注入部分按照官方文档的步骤,但是替换成了我自己写的WPF的内容,因为官方给的是UWP这块不熟悉怕出错就替换了。 引用 Microsoft Document 中的介绍 包 CommunityToolkit.Mvvm (又名 MVVM 工具包,以前名为 Microsoft.To

    2024年02月03日
    浏览(38)
  • CommunityToolkit.Mvvm----配置

    一、介绍: CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit.Mvvm)是一个现代、快速和模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,围绕以下原则生成: 独立于平台和运行时 - .NET Standard 2.0、.NET Standard 2.1 和 .NET 6🚀(与 UI 框架无关) 易于选取和使用 - 对

    2024年04月17日
    浏览(76)
  • WPF CommunityToolkit.Mvvm

    CommunityToolkit.Mvvm(以下简称Toolkit)是WPF最有名的两个框架,一个是Prism,另一个就是Toolkit。 Prism可以看我的Prism详解 WPF Prims框架详解 Toolkit 官方文档 用 CommunityToolkit.Mvvm 加速 MVVM 开发流程 Toolkit简单复写了我们常用的两个方法 一个是 SetProperty,一个是RelayCommand SetProperty,通知

    2024年02月12日
    浏览(41)
  • CommunityToolkit.Mvvm笔记1---Instruction

            CommunityToolkit.Mvvm是一个官方社区套件(Windows Community Toolkit),延续了MVVMLight的风格,是一个现代、快速和模块化的 MVVM 库。 它是 .NET 社区工具包的一部分。 第一:入门安装 1,用NuGget安装,搜索CommunityToolkit找到安装即可。 2,Install-Package CommunityToolkit.Mvvm 命令安装

    2024年04月17日
    浏览(38)
  • CommunityToolkit.Mvvm学习笔记(6)——RelayCommand

    由于项目时间比较紧,所以先拣使用频繁的模块学习了。ComponentModel中的ObservableValidator等后面有空再学。这篇先看命令RelayCommand,毕竟WPF中命令与变量的绑定是两大主要绑定。如果说属性绑定是向UI暴露数据,那Command就是向UI暴露方法(或者说逻辑)。 MVVM Toolkit中的RelayComm

    2024年02月06日
    浏览(39)
  • WPF CommunityToolkit.Mvvm Messenger通讯

    CommunityToolkit.Mvvm Messenger 十月的寒流: 如何使用 CommunityToolkit.Mvvm 中的 Messenger 来进行 ViewModel 之间的通信 我这里只讲简单的弱Messenger,这个是Toolkit帮我们封装好的,里面好像有什么垃圾回收什么的,里面怎么运行的我也没去研究。我这里就简单讲解一下怎么用 WeakReferenceMess

    2024年02月09日
    浏览(41)
  • CommunityToolkit.Mvvm学习笔记(3)——ObservableRecipient

    所处的位置, 命名控件:Microsoft.Toolkit.Mvvm.ComponentModel 程序集:Microsoft.Toolkit.Mvvm.dll 包:Microsoft.Toolkit.Mvvm ObservableRecipient类型是可监视对象(Observable objects)的一个基类,这些对象扮演着消息接收者的角色。ObservableRecipient类是ObservableObject的拓展,它也提供了使用IMessenger类型

    2024年02月11日
    浏览(36)
  • CommunityToolkit.Mvvm学习笔记(4)——Messenger

    如果你对WPF有一定了解,你应该知道WPF中的命令是一个实现了ICommand接口的类。同样本文虽然标题是Messenger,但也要从IMessenger接口说起。至于Messenger的中文名,我觉得就叫它的直译“信使”好了,毕竟传递消息就是信使的能力嘛。 命名空间:Microsoft.Toolkit.Mvvm.Messaging 程序集:

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包