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

ykejflvf  于 12个月前  发布在  Shell
关注(0)|答案(3)|浏览(123)

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

列表页:

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}");
        }

字符串

详情页:

public int CurrentPage { get; set; }
        public int CurrentLine { get; set; }
        public bool IsFromSearchPage { get; set; }

        public string PageNo
        {
            set
            {
                CurrentPage = Convert.ToInt32(Uri.UnescapeDataString(value));
                IsFromSearchPage = true;

                LoadPagesAsSingle();
            }
        }

        public string LineNo
        {
            set
            {
                CurrentLine = Convert.ToInt32(Uri.UnescapeDataString(value));
            }
        }

        public MyPages()
        {
            InitializeComponent();

            conn = DependencyService.Get<ISQLiteMyConnection>().GetConnection();

            IsFromSearchPage = false;

            LoadPagesAsSingle();
        }

carvr3hs

carvr3hs1#

您可以在detailPage中使用参数

public DetailPage(string val1,string val2)
{

}

字符串
然后在我的页面中调用它

Navigation.PushAsync(new DetailPage("parameter1","parameter2"));

qlzsbp2j

qlzsbp2j2#

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

[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; }
        }

字符串

gkl3eglg

gkl3eglg3#

作为另一种解决方案,您可以通过页面的静态成员传递参数。例如,页面可能包含静态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");
}

相关问题