完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:MVVMLight的Messenger

    發布于:2019-07-25 15:19:23

    網友投稿

    更多

    MvvmLight里的Messenger的注冊方法有一個是這樣的:


            //

            // 摘要:

            //     Registers a recipient for a type of message TMessage. The action parameter will

            //     be executed when a corresponding message is sent.

            //     Registering a recipient does not create a hard reference to it, so if this recipient

            //     is deleted, no memory leak is caused.

            //

            // 參數:

            //   recipient:

            //     The recipient that will receive the messages.

            //

            //   action:

            //     The action that will be executed when a message of type TMessage is sent.

            //

            // 類型參數:

            //   TMessage:

            //     The type of message that the recipient registers for.

            void Register<TMessage>(object recipient, Action<TMessage> action);


    這個TMessage是要傳送消息的類型,它就是action的參數,但是這個recipient有點費解。



    這就要說到Action的使用問題


        class Program

        {

            static void Main(string[] args)

            {

                Test test = new Test();

                Action<string> action = new Action<string>(test.Excute);

                action("ssdfsdf asdfsad");

                MethodInfo minfo = action.Method;

                minfo.Invoke(test, new object[] { "sdfsdf sdf"});

                Console.ReadLine();

            }

        }


        public class Test

        {

            public void Excute(string str)

            {

                Console.WriteLine(str);

            }

        }


    重上面的小例子我可看出Action 也是可以使用反射來調用的,查看Messenger的源碼,發現它也是使用這個方法來調用Action,


    所以這個recipient應該是委托的方法所在的對象,就是使用放射調用方法的object參數


    下面舉個修改Mvvmlight的WelcomeTitle的例子,




    我們可以在MainViewModel的構造函數里注冊修改文字的委托


                Messenger.Default.Register<string>(this,"改文字", p => {

                    this.WelcomeTitle = p;

                });


    在界面上加一個Button,并在Click事件里SendMessage


                Messenger.Default.Send<string>("勝多負少", "改文字");




    注意token要一樣

    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:Revit開發區分基本墻,幕墻,疊層墻

    下一篇:二次開發教程:C# 通過MVVMLight探索IOC

    60acb4e0ef112.png
    主站蜘蛛池模板: 日韩AV在线不卡一区二区三区| 国产成人精品久久一区二区三区av| 日本精品一区二区三区在线视频 | 美女AV一区二区三区| 福利一区福利二区| 精品一区二区无码AV| 国产无线乱码一区二三区| 亚洲日本一区二区三区在线| 久久福利一区二区| 亚洲av成人一区二区三区观看在线| 国产综合精品一区二区| 国产福利电影一区二区三区久久老子无码午夜伦不| 精品国产一区二区麻豆| 色噜噜狠狠一区二区三区果冻| 国产成人av一区二区三区在线 | 精品一区二区三区波多野结衣 | 亚洲国产精品第一区二区三区| 亚洲一区中文字幕在线电影网| 国产免费伦精品一区二区三区| 亚洲国产AV一区二区三区四区| 亚洲AV美女一区二区三区| 日亚毛片免费乱码不卡一区| 人妻少妇精品视频三区二区一区| 综合久久一区二区三区 | 久久精品国产一区| 久久er99热精品一区二区| 色婷婷AV一区二区三区浪潮| 国产精品一区二区久久精品无码| 国产精品久久无码一区二区三区网 | 无码人妻AⅤ一区二区三区水密桃| 精品国产亚洲第一区二区三区| 人妻在线无码一区二区三区| 国产免费一区二区三区VR| 亚洲日韩AV一区二区三区四区| 国产伦一区二区三区免费| eeuss鲁片一区二区三区| 国产成人综合亚洲一区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产亚洲日韩一区二区三区 | 国产三级一区二区三区| 午夜无码视频一区二区三区|