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

Xamarin使用QueryProperty传值时始终获取null值的问题排查

问题原因及解决方法

1. QueryProperty赋值时机错误

你在Page3的构造函数里直接调用了showdisp(),但Shell导航的执行顺序是:先实例化页面(执行构造函数),之后才会通过QueryProperty机制给属性赋值。所以构造函数执行时str还未被赋值,自然返回null。

2. 属性未实现变更通知

str是自动属性,没有实现INotifyPropertyChanged接口。即便后续QueryProperty成功赋值,Label的绑定也无法感知到属性变化,依旧显示旧值(初始的null)。


修改后的接收页面后台代码

using System.ComponentModel;
using System.Runtime.CompilerServices;

[QueryProperty(nameof(str), nameof(str))]
public partial class Page3 : ContentPage, INotifyPropertyChanged
{
    private string _str;
    public string str 
    { 
        get => _str; 
        set 
        {
            if (_str != value)
            {
                _str = value;
                OnPropertyChanged();
                // 属性赋值完成后再调用弹窗方法
                showdisp();
            }
        }
    }

    public Page3()
    {
        InitializeComponent();
        BindingContext = this;
        // 移除构造函数内的showdisp()调用
    }

    public async void showdisp()
    {
       await App.Current.MainPage.DisplayAlert("Hello", str, "OK");
    }

    // 实现INotifyPropertyChanged接口,支持绑定更新
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

补充说明

  • 确保Page3已在Shell路由中注册(比如在AppShell.xaml.cs中添加Routing.RegisterRoute(nameof(Page3), typeof(Page3));),你的导航正常,这一步应该已经完成。
  • 传值页面的代码逻辑没有问题,$"{nameof(Page3)}?str={str}"的写法符合Shell导航传值规范。

内容的提问来源于stack exchange,提问作者KLeo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:10:59