Xamarin FORms 路由,在 Shell 中传递参数

Ste*_*BEG 3 xamarin xamarin.forms

在我的 Page1 后面的代码中,我有:

        {
            //do not select item
            ((ListView)sender).SelectedItem = null;

            //go to stockDetailsPage
            await Shell.Current.GoToAsync("postlogin/stockdetails?tickerSymbol=AAPL.NASDAQ");
        }
Run Code Online (Sandbox Code Playgroud)

如您所见,我对值进行了硬编码以对其进行测试。

早些时候它没有 param ,它可以工作,现在我需要传递 param tickerSymbol。在我的 ViewModel 的 stockDetailsPage 中,我添加了

[QueryProperty("TickerSymbol", "tickerSymbol")] 高于我的班级

在我的班级中,我声明了属性:

        public string TickerSymbol
        {
            set { SetProperty(ref tickerSymbol, Uri.UnescapeDataString(value)); }
            get { return tickerSymbol; }
        }
Run Code Online (Sandbox Code Playgroud)

因此,在该 vm 的构造函数中,我现在想使用该参数的输入参数调用方法,但我null一直在获取。

你能告诉我我错在哪里吗?

小智 7

正如 Xamarin文档所说,它应该能够将 param 传递给页面的 BindingContext 类,我尝试了以下操作并且它有效:

在后面的代码中,将 BindingContext 设置为您的 ViewModel:

TestParamViewModel testParamViewModel;
public TestPage()
{
   InitializeComponent();
   testParamViewModel = new TestParamViewModel();
   this.BindingContext = testParamViewModel;
}
Run Code Online (Sandbox Code Playgroud)

将 QueryPropertyAttribute 添加到您的 ViewModel:

[QueryProperty("Name", "name")]
class TestParamViewModel
{
    string name;
    public string Name
    {
        set
        {
            name = Uri.UnescapeDataString(value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

呼叫导航:

await Shell.Current.GoToAsync("testpage?name=Abyssinian");
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。