Xamarin.forms 为什么不是';t信息中心。订阅工作吗?

Xamarin.forms 为什么不是';t信息中心。订阅工作吗?,xamarin.forms,Xamarin.forms,在Xamarin表单中,我在出现的中订阅,在出现的中取消订阅。但它仍然为每个实例调用回调 protected override void OnAppearing(){ if (isGoingBack) MessagingCenter.Subscribe<PhoneNumberVerificationPajModal, string>(this, "Phone.Verify", codeSendRequest); } protected override voi

在Xamarin表单中,我在出现的
中订阅
,在出现的
中取消订阅
。但它仍然为每个实例调用回调

protected override void OnAppearing(){
   if (isGoingBack)
        MessagingCenter.Subscribe<PhoneNumberVerificationPajModal, string>(this, "Phone.Verify", codeSendRequest);
}

protected override void OnDisappearing(){
    if (isGoingBack)
        MessagingCenter.Unsubscribe<PhoneNumberVerificationPajModal>(this, "Phone.Verify");
}
protected override void OnAppearing(){
如果(正在返回)
MessagingCenter.Subscribe(这是“Phone.Verify”,codeSendRequest);
}
受保护的覆盖无效OnDisappearing(){
如果(正在返回)
取消订阅(这是“电话验证”);
}

真相是呼叫
取消订阅
起作用。但是,在我的代码中,当单击按钮打开
页面时,我有一个条件。由于该页面是发送消息的页面,当用户单击按钮时,我设置
isGoingBack=false
。当我按下后退按钮并返回页面时,我可以取消订阅并接听来电。但是转到下一个回调事件get call的次数与我创建新页面的次数相同。但事实是,每当我离开页面时,我都会取消订阅。

在您的示例中,您没有将arg类型传递给Unsubscribe方法

尝试使用您正在订阅的同一类型参数取消订阅

所以不是

MessagingCenter.Unsubscribe<PhoneNumberVerificationPajModal>(this, "Phone.Verify");
MessagingCenter.Unsubscribe(这是“Phone.Verify”);
试一试

MessagingCenter.Unsubscribe(这是“Phone.Verify”);

我建议在构造函数中订阅,仅在
返回时取消订阅
我已经尝试过了。问题是用户可以随时返回页面。因此,每当用户来到页面时,
页面将订阅。回去的时候取消订阅。这应该是有效的。看起来每当页面再次订阅时,
MessagingCenter
都有缓存或计数,并再次绑定所有其他订户呼叫以
this
。当您说每个实例都回拨时,这到底意味着什么?@FreakyAli这意味着每次我进入页面,
MessagingCenter.send()
每次都给订户打电话。是的。我错过了额外的泛型类型。
MessagingCenter.Unsubscribe<PhoneNumberVerificationPajModal, string>(this, "Phone.Verify");