微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Shell:将多个参数传递给另一个页面

如何解决Xamarin Shell:将多个参数传递给另一个页面

我的 Xamarin Forms Shell 应用中有两个页面一个列表页面和另一个是详细信息页面。 当我在列表页面中选择项目时,将显示详细信息页面。我能够将一个参数传递给第二页。我知道如何传递第二个值。但是我应该如何接收第一个属性本身的第二个值。

列表页面:

const postAdapter = createEntityAdapter({
  selectId: myIdExtractor,});

详情页面

        async private void myLines_ItemTapped(object sender,ItemTappedEventArgs e)
        {
            var line = (Models.QLines)e.Item;
            int pno = line.PageNo;
            int lno = line.LineNo;
            await Shell.Current.GoToAsync($"//mainTabs/pages?pageno={pno}&lineno={lno}");
        }

解决方法

作为另一种解决方案,您可以通过页面的静态成员传递参数。例如页面可能包含静态 ViewModel 对象,该对象将在页面出现之前进行初始化。

    public class ViewModel : ViewModelBase   
    {
        public string Text { get; set; }
        public int Number { get; set; }
    }

    public class MyPage : Page
    {
        static ViewModel _viewModel = new ViewModel();

        public MyPage() 
        {
            BindingContext = _viewModel;
        }

        public static void InitPage(string text,int number)
        {
            _viewModel.Text = text;
            _viewModel.Number = number;
        }
    }
}

调用者内部代码

static async Task GotoPage()
{
    MyPage.InitPage("Text",123);
    await Shell.Current.GoToAsync($"//mainTabs/pages");
}
,

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/navigation#pass-data 中所述,您可以使用 QueryProperty 属性在 queryID 和目标属性之间进行映射:

[QueryProperty("Pageno","pageno")]
[QueryProperty("Lineno","lineno")]

public partial class DetailPage: ContentPage
{

        private int _Pageno;
        public int Pageno
        {
            get { return _Pageno; }
            set { _Pageno = value; }
        }

        private int _Lineno;
        public int Lineno
        {
            get { return _Lineno; }
            set { _Lineno = value; }
        }
,

您可以在detailPage

中使用参数
public DetailPage(string val1,string val2)
{

}

然后在MyPage

中调用它
Navigation.PushAsync(new DetailPage("parameter1","parameter2"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。