Как остановить центр обмена сообщениями, чтобы перестать подписываться несколько раз в Xamarin.Forms?
Я создаю приложение, и оно должно посылать аргумент на другую страницу и посылать аргумент с помощью Messagingcenter, когда я отправляю с использованием MessagingCenter, он вызывает более одного раза.
Если я использую отписаться, чем в следующий раз, он не получит в следующий раз.
MessagingCenter.Send(this, "Invoke", "Invokedtrue");
MessagingCenter.Subscribe<MyPage, string>(this, "Invoke", async (sender, arg) =>
{
await Process(arg);
});
MessagingCenter.Unsubscribe<MyPage>(this,"Invoke");
**ListPage**
private void ViewCell_Tapped(object sender, EventArgs e)
{
try
{
MessagingCenter.Send(this, "Invoke", "Invokedtrue");
}
catch (Exception ex)
{
Debug.Write(ex);
}
}
**Detail Page**
MessagingCenter.Subscribe<ListPage, string>(this, "Invoke", async (sender, arg) =>
{
await Process(arg);
});
private async Task Process(string arg)
{
//Here is api call to view detail of particular record
//Here I unsubscribe the MessagingCenter.
MessagingCenter.Unsubscribe<ListPage>(this,"Invoke");
}
Я хочу отправить только один раз, используя подписку и отправить только один раз.
Может кто-нибудь разобраться в этом и предложить мне, что я должен сделать в этом?
1 ответ
Хотите отправить и получить сообщение только один раз? Затем вы можете использовать метод отмены подписки после получения сообщения. Например, вы можете сделать так:
MessagingCenter.Subscribe<MyPage, string>(this, "Invoke", async (sender,
arg) =>
{
await Process(arg);
MessagingCenter.Unsubscribe<MyPage>(this,"Invoke");
});
Обновлено:
На DetailPage
, вы можете позвонить MessagingCenter.Subscribe
в методе OnAppearing()
и позвонить MessagingCenter.Unsubscribe
в методе OnDisappearing
просто так:
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe<ListPage, string>(this, "Invoke", async (sender, arg) =>
{
Debug.Write("123456----> get one msg");
DisplayAlert("Alert", "We have received a message.", "OK");
});
}
protected async override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Unsubscribe<ListPage,string>(this, "Invoke");
}
}
На ListPage
async void OnTap (object sender, EventArgs e)
{
await Navigation.PushAsync(new DetailPage());
try
{
MessagingCenter.Send(this, "Invoke", "Invokedtrue");
Debug.Write("123456----> send one msg");
}
catch (Exception ex)
{
Debug.Write(ex);
}
}
Примечание: когда вы входите в ListPage
, вы можете попробовать следующий код:
MainPage = new NavigationPage( new ListPage());
Ссылка на полный демо здесь, вы можете проверить это.