You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:05:25