Xamarin.forms MessagingCenter。订阅不收听外部消息?

Xamarin.forms MessagingCenter。订阅不收听外部消息?,xamarin.forms,Xamarin.forms,我在OnAppearing方法中加载页面的数据,但这会导致在数据不变的情况下加载数据,比如从另一个页面调用PopupAsync。所以我认为信息中心会有所帮助。我在页面中创建了一个标志字段,并订阅了来自外部的任何消息,以决定是否更新数据, 例如,当用户第一次打开页面时,从MenuViewModel中可以看到这一点,因此我需要加载数据: var p = new FeedbackListPage(); MessagingCenter.Send(this, "loadData", "1"); await

我在OnAppearing方法中加载页面的数据,但这会导致在数据不变的情况下加载数据,比如从另一个页面调用PopupAsync。所以我认为信息中心会有所帮助。我在页面中创建了一个标志字段,并订阅了来自外部的任何消息,以决定是否更新数据, 例如,当用户第一次打开页面时,从MenuViewModel中可以看到这一点,因此我需要加载数据:

var p = new FeedbackListPage();
MessagingCenter.Send(this, "loadData", "1");
await Navigation.PushAsync(p);
在反馈列表页的构造函数中:

InitializeComponent();
BindingContext = vm = new FeedbackViewModel(Navigation);
MessagingCenter.Subscribe<string>(this, "loadData", ( _loadData) =>
   {
      loadDataStr = _loadData;
   });

问题是从未调用Subscribe的操作

您可以尝试以下操作:

使用MessagingCenter.Send在您想要更新任何页面的数据时发送信号,然后在ViewModel的构造函数中使用MessagingCenter.Subscribe执行所需操作

发送:

订阅:

解决方案:

MessagingCenter的API:

1.订阅对象订户,字符串消息,操作回调,TSender source=null

2.订阅对象订户,字符串消息,操作回调,TSender source=null

因此,如果要使用MessageCenter传递参数,则应同时定义发送方和参数:


请参阅:

谢谢,我是否可以定义多个发件人,但只需一次订阅,目前我想从两个ViewModels收听,并拥有两个相同的MessagingCenter。订阅。。只与TSenderNo不同,您需要两个MessagingCenter。订阅。。因为您必须首先定义TSender的类型。
protected override void OnAppearing()
        {
            base.OnAppearing();
            if (loadDataStr=="1")
               vm.OnLoadFeedbacks();
        }
MessagingCenter.Send<namespace.App>((namespace.App)Xamarin.Forms.Application.Current, "update");
MessagingCenter.Subscribe<namespace.App>((namespace.App)Application.Current, "update", (sender) => {
                // update - get data
            });
  MessagingCenter.Subscribe<MainPage,string>(this, "loadData", (sender,_loadData) =>
            {
                loadDataStr = _loadData;
            });