如何在带有数据的页面之间导航

时间:2020-06-03 22:35:59

标签: c# xamarin xamarin.forms

我希望有人能帮助我了解它如何工作。 我有一个Xamarin Forms项目

我的page1的代码如下

Page1.xaml

<StackLayout BindableLayout.ItemsSource="{Binding List1}">
  <BindableLayout.ItemTemplate>
         <DataTemplate>
             <AbsoluteLayout>
                 <Button Text="{Binding NameP} Clicked="Button_Clicked"/>
             </AbsoluteLayout>
         </DataTemplate>
   </BindableLayout.ItemTemplate>
 </StackLayout>

Page1.cs

using System.Collections.Generic;
using Xamarin.Forms;

namespace app.Views
{
    public partial class Page1 : ContentPage
    {
        public Page1()
        {
            InitializeComponent();

            ListPrograms1 = new List<Programmes1>();

            {
                ListPrograms1.Add(new Programmes1() { NameP = "Tomato", Detail = "xxxxx" });
                ListPrograms1.Add(new Programmes1() { NameP = "Pepperoni", Detail = "yyyyy" });

            }
            BindingContext = this;
        }

        public List<Programmes1> ListPrograms1
        {
            get; set;
        }


        public class Programmes1
        {
            public string NameP { get; set; }
           public string Detail { get; set; }
        }

        public async void Button_Clicked(object sender, System.EventArgs e)
        {
            await Navigation.PushAsync(new Page2());
        }

    }
}

和第二页 Page2.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="app.Views.Page2">

<StackLayout VerticalOptions="Start" HorizontalOptions="Center">
                <Label Text={Binding NameP}" />
              <Label Text={Binding Detail}" />
            </StackLayout>
</ContentPage>

因此,当我单击按钮时,我想转到Page2并传递上一页或另一个Modelpage中的数据。

当您拥有数据列表并希望在多个页面中使用它们时,什么是好方法? 您是否建议使用数据库?

我的问题与ListView类似(当您单击item时,可以转到另一个详细信息页面),但是在这里我使用了可绑定的布局。

1 个答案:

答案 0 :(得分:1)

作为Jason的回复,您可以使用构造函数将数据传递到另一个页面。

对于第一页,您可以在Button_click事件中找到当前的选择项。

   private async void Button_Clicked(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        Programmes1 data = ListPrograms1.Find(s => s.NameP == btn.Text);
        await Navigation.PushAsync(new Page26(data));
    }

然后修改具有一个参数的第二个页面构造函数。

 public partial class Page26 : ContentPage
{
    public Programmes1 Model { get; set; }

    public Page26(Programmes1 model)
    {
        InitializeComponent();
        Model = model;
        Console.WriteLine(Model.NameP);
        this.BindingContext = this;
    }

}

<StackLayout HorizontalOptions="Center" VerticalOptions="Start">
            <Label Text="{Binding Model.NameP}" />
            <Label Text="{Binding Model.Detail}" />


        </StackLayout>

请注意:,您需要将ListPrograms1绑定到StackLayout BindableLayout.ItemsSource,而不是List1,因为我找不到List1。

enter image description here