使用Xamarin.Forms MessagingCenter在ViewModel和方法之间进行通信是否有任何优点或缺点

Ala*_*an2 1 xamarin xamarin.forms

我正在研究使用一种或另一种方法,特别是方法2。有人能告诉我使用第二种方法优于第一种方法的优缺点。

方法1-ViewModel.cs

PTBtnCmd = new Command<Templates.WideButton>((btn) =>             
              MessagingCenter.Send<CFSPageViewModel, Templates.WideButton>(
              this, "PTBtn", btn));
Run Code Online (Sandbox Code Playgroud)

方法1-MyPage.xaml.cs(此文件中的SetLang等..方法)

MessagingCenter.Subscribe<CFSPageViewModel, Templates.WideButton>(
        this, "PTBtn", (s, btn) =>
        {
            Utils.SetState(btn.Text, vm.PT);
            SetLangVisible(btn.Text);
            SetLangSelected(btn.Text);
            vm.CFSMessage = Settings.cfs.TextLongDescription();
        });
Run Code Online (Sandbox Code Playgroud)

要么

方法2-ViewModel.cs(此文件中的SetLang等..方法)

PTBtnCmd = new Command<string>(SetMode);

private void SetMode(string btnText)
    {
        Utils.SetState(btnText, PT);
        SetLangVisible(btnText);
        SetLangSelected(btnText);
        CFSMessage = Settings.cfs.TextLongDescription();
    }
Run Code Online (Sandbox Code Playgroud)

还希望听到有关将方法添加到ViewModel.cs代码中的想法的评论。将它们放在另一个文件中会更好吗?

小智 5

MessagingCenter帮助您使代码保持解耦状态。有时您会发现自己处于需要在某些代码之间创建引用的位置,但是这样做,您必须在可重用性和可维护性上进行折衷。

尝试将其用作最后的手段;通常,还有另一种方法可以实现所需的功能。虽然发送消息的功能非常强大,但过多使用它确实会影响您的可读性。

一个用例示例MessagingCenter是您需要在应用的多个部分中更新值的情况。您可以从多个位置订阅消息,从而在收到消息时在多个位置执行代码。另一个用例是,如果完成了一些后台过程,它可以发送一条消息,然后您可以在UI中通知用户。