Xamarin便携式,如何从选定的列表项导航回MainPage并传递值

时间:2016-05-18 06:22:46

标签: c# xaml xamarin cross-platform xamarin.forms

我之前的问题是,如何从ToolbarItem导航到另一个页面并保持导航栏存在。 :Xamarin portable project navigate with ToolbarItem to another page by using MasterDetailPage 现在,当我从项目列表中选择项目并且我想回到我的MainPage时遇到麻烦,但是我收到了这样的错误:System.Exception: Android only allows one navigation page on screen at a time和MainPage页面出现了,但它冻结了,我现在看到导航栏上的2个按钮。但它应该只有一个。在MainPage中我称之为城市:

public partial class MainPage : MasterDetailPage
    { public MainPage()
        {
            InitializeComponent();
            masterPage.ListView.ItemSelected += OnItemSelected;
            CityClick.Clicked += async (sender, e) =>
            {
                await Detail.Navigation.PushAsync(new Cities());
            };}}

然后,当我在Cities.xaml.cs时,我想回到MainPage()。此外,我还希望将我选择的项目值从列表传递到MainPage.xaml导航中的标签。第二个问题是当我从Cities.xaml.cs返回项目选择到MainPage()后,我收到了我之前提到的错误。这是我的城市课程:

public partial class Cities : ContentPage
    {
        public Cities()
        {
            InitializeComponent();
            Label header = new Label
            {
                Text = ...
            };
            List<City> cities = new List<City>
            {new City("City1"),
             new City("City2")};

            ListView listView = new ListView
            {ItemsSource = cities,
                ItemTemplate = new DataTemplate(() =>
                {
                    Label nameLabel = new Label();
                    nameLabel.SetBinding(Label.TextProperty, "Name");
                    BoxView boxView = new BoxView();
                    return new ViewCell
                    {
                        ...
                    };
            ...
            {
                Children =
                {
                    ...
                }
            };
            listView.ItemSelected += async (sender, e) =>
            {
                if (e.SelectedItem == null)
                {return;}
                else
                {
                    await Navigation.PushAsync(new MainPage());
                }
            };
        }
        class City
        {public City(string name)
            {
                this.Name = name;
            }
            public string Name { private set; get; }
        };}

这就是返回MainPage()时的外观,它会冻结所有内容并显示另一个标签:

enter image description here

编辑:关于@AkashAmin评论我从await Navigation.PushAsync(new MainPage());更改为await Navigation.PopAsync();并且效果非常好。现在,我仍然面临着从City类到MainPage类的消极价值的困境。

1 个答案:

答案 0 :(得分:1)

我从我的城市课程导航回我的主页,从PushAsync更改为PopAsync();。感谢@Akash Amin提供的信息。这个等待的任务还解决了Navigation ToolbarItems中的重复标签问题。

此外,我解决了从Cities传递给MainPage类问题的价值。在此链接中,您可以看到解决此问题的所有演练:https://stackoverflow.com/a/37350738/3727758