gpt4 book ai didi

Xamarin Forms MessagingCenter Subscribe 调用了两次

转载 作者:行者123 更新时间:2023-12-04 03:48:29 24 4
gpt4 key购买 nike

我在产品页面 View 模型的 ListView 中单击一个产品项目以显示一个弹出窗口(使用 rg.plugin 弹出窗口)以选择其中一个产品变体。选择变体后,我将使用以下方法将所选变体发送到产品页面来自变体弹出页面 View 模型的消息传递中心,在产品页面 View 模型构造函数中订阅。在那里工作正常。当我导航到上一页然后返回到此产品页面以向该产品添加一个或多个变体时同样之前选择的产品,Messagingcenter subscribe 调用了两次,产品值(value)增加了​​两倍。尝试在出现时在产品页面订阅,在消失方法中取消订阅。仍然调用两次?如何解决这个问题?

调用弹窗:

               var result = await dataService.Get_product_variant(store_id, product_id);
if (result.status == "success")
{
ind_vis = false;
OnPropertyChanged("ind_vis");

App.Current.Properties["product_variant_result"] = result;
App.Current.Properties["cartitems"] = purchaselist;
App.Current.Properties["selected_product"] = product_List2 ;
await PopupNavigation.Instance.PushAsync(new Popup_variant());
}

弹出 View 模型:发送消息

        public Popup_variant_vm()
{
Radio_btn = new Command<Product_variant_list2>(Radio_stk_tapped);
product_variant_list = new List<Product_variant_list2>();
purchaselist = new ObservableCollection<Product_list2>();
show_variants();
}

internal void Confirm_variant()
{
if(App.Current.Properties.ContainsKey("selected_variant"))
{
MessagingCenter.Send<Popup_variant_vm, object>(this, "selected_variant", App.Current.Properties["selected_variant"]); //Message send from popup to product page
}
else
{
DependencyService.Get<IToast>().LongAlert("Please select any size");
}
}

产品页面 View 模型:在此处订阅..从上一页导航到此页面时调用两次

    public Store_page()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();

var vm = new store_page_vm();
vm.Navigation = Navigation;
BindingContext = vm;

MessagingCenter.Unsubscribe<Popup_variant_vm, object>(this, "selected_variant");
MessagingCenter.Subscribe<Popup_variant_vm, object>(this, "selected_variant",async (sender, selected_variant) =>
{
var vm1 = BindingContext as store_page_vm;
vm1?.Addcart2(selected_variant);// called twice
});
}

在产品cs页面取消订阅

protected override void OnDisappearing()
{
var vm = BindingContext as store_page_vm;
vm?.Save_cart();
MessagingCenter.Unsubscribe<Popup_variant_vm>(this, "selected_variant");
}

最佳答案

您的退订应该如下所示并且应该有效:

  MessagingCenter.Unsubscribe<Popup_variant_vm, object>(this, "selected_variant");

关于Xamarin Forms MessagingCenter Subscribe 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com