Xamarin Forms关闭弹窗后无法更新主页面Label问题求助
问题:弹窗选择项后无法更新主页面Label内容
场景与代码说明
弹窗页面使用DataGridView选择项目后,需更新主页面Label内容,但绑定同一个ViewModel的情况下无法实现。以下是相关代码:
弹窗关闭逻辑
protected override void OnDisappearing() { viewModel.CarilisteClose = true; base.OnDisappearing(); }
ViewModel中CarilisteClose属性
public bool CarilisteClose { get => carilisteClose; set { carilisteClose = value; OnPropertyChanged(); Console.WriteLine(carilisteClose); changeCariText(carilisteClose); } }
SearchCari属性与更新方法
public string SearchCari => $"{secilenCari}"; void changeCariText (bool mbool ) { Console.WriteLine("change cari work"); if (mbool==true) { var adi = Preferences.Get("selectedCariAdi", ""); var kodu = Preferences.Get("selectedCariKodu", ""); secilenCari = $"{kodu} {adi}"; Console.WriteLine("cari liste close " + secilenCari); OnPropertyChanged(nameof(SearchCari)); Console.WriteLine(SearchCari); } }
Label绑定代码
<Label Text="{Binding SearchCari}" x:Name="secilenCariText3" TextColor="Black" FontSize="Medium" WidthRequest="200" HeightRequest="50" HorizontalOptions="Center" VerticalOptions="Center"/>
补充现象
- 控制台输出显示
CarilisteClose已设为True,选中项数据正确,但弹窗关闭后Label未更新 - 通过按钮绑定命令调用
changeCariText(),可正常更新Label
解决方案
使用MessagingCenter实现页面间数据传递:
弹窗页面发送选中数据
MessagingCenter.Send<CariRoot>(selectedCari, "mselectedCari");
(注:CariRoot为传递的数据类型,selectedCari是选中的对象实例,mselectedCari为消息唯一标识)
主页面ViewModel接收数据并更新
MessagingCenter.Subscribe<CariRoot>(this, "mselectedCari", async (sender) => { SearchCari = $"{sender.CARIUNVAN}"; _SelectedCariRoot = sender; });
内容的提问来源于stack exchange,提问作者Mert Altiparmak
相关产品推荐
相关产品推荐

