Центр сообщений Xamarin Forms после метода Navigation.PushAsyn c не заполняет список - PullRequest
1 голос
/ 18 июня 2020

У меня есть две страницы, допустим, PageA и PageB (PageB имеет список с именем listview). Я хочу отправить объект класса на страницу B.

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

и метод OnAppearing PageB похож (я использовал OnAppearing, я запускаю асинхронные c операции в методе подписки)

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

listview не заполняет все, хотя listview.ItemSource не пусто. но когда я меняю коды PageA, например

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

, он работает. Что не так?

1 Ответ

0 голосов
/ 18 июня 2020

Конечно, первый случай не сработает. Что вы делаете:

  1. Уведомите подписчика MessagingCenter об изменении коллекции;
  2. После этого вы нажимаете новую страницу и подписываетесь на топи c.

После того, как страница B была обработана, подписка уже была оформлена, но никто не получил сообщение.

Второй подход является правильным, потому что вы сначала инициализируете страницу (и она подписывается на topi c), а затем, когда у вас уже есть подписчик, вы инициируете logi notify c.

По сути, в первом случае вы сначала «выкрикиваете» свое сообщение, а затем появляется кто-то, кто слышит крик. Но в момент «выкрикивания» сообщения его никто не услышал.

Однако в данном конкретном случае MessagingCenter не требуется. Более простой и лучший подход - передать данные в ctor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...