【问题标题】:Xamarin Forms MessagingCenter after Navigation.PushAsync method does not populate listviewNavigation.PushAsync 方法后的 Xamarin Forms MessagingCenter 不填充列表视图
【发布时间】:2020-10-08 09:50:31
【问题描述】:

我有两个页面,假设 PageA 和 PageB(PageB 有一个名为 listview 的列表视图)。我想向 PageB 发送一个类对象。

MessagingCenter.Send<PageA, FooClass>(this, "foo", foo);
await Navigation.PushAsync(new PageB());

和 PageB 的 OnAppearing 方法类似(我使用 OnAppearing 我在 subscribe 方法中运行异步操作)

 MessagingCenter.Subscribe<PageA, FooClass>(this, "foo", async (page, source) => {
  listview.ItemSource = ...// Some method
 });
 MessagingCenter.Unsubscribe<ProfilesPage>(this, "Company");

尽管 listview.ItemSource 不为空,但 listview 不会填充。但是当我像

这样更改 PageA 的代码时
await Navigation.PushAsync(new PageB());           
MessagingCenter.Send<PageA, FooClass>(this, "foo", foo);

它有效。这有什么不对?

【问题讨论】:

  • 我喜欢 MessagingCenter,但在这种情况下,通过它的构造函数将数据传递给 PageB 会非常简单

标签: c# android listview xamarin xamarin.forms


【解决方案1】:

当然,第一种情况是行不通的。你正在做的是:

  1. 通知MessagingCenter的订阅者收藏已更改;
  2. 之后,您将推送新页面并订阅主题。

页面B渲染后,订阅已经执行,但是没有人收到消息。

第二种方法是正确的,因为您首先初始化页面(并且它订阅主题),然后当您已经有订阅者时,您正在启动通知逻辑。

基本上,在第一种情况下,您首先“喊”您的信息,然后出现可以听到喊声的人。但在“大喊”消息的时候,却没有人听到。

但是,在这种特殊情况下,您不需要MessagingCenter。更简单更好的方法是在ctor中传递数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多