Xamarin.forms与MasterDetails页面和导航

Art*_*rti 3 c# xamarin.forms

我有一个应用程序,我希望在每个详细信息页面都有一个包含2个选项和toolbarItems的母版页.

在此输入图像描述

例如,这里我有一个设置页面作为我的详细信息页面,其中有两个tollbaritems保存和取消.用户必须输入必须保存的用户数据的形式.所以点击保存toolbarItem我想保存数据并将用户重定向到其他页面(比如'PageA'),这不包含在主页列表选项中(Settins,Login)

我该怎么办呢?如果我这样做,await Navigation.PushAsync(new PageA());我不会得到母版.我回到图标回到主要详细信息页面.但我想将用户重定向到一个页面,该页面也应该有masterdetails选项(设置和登录).

我也在保存按钮点击中尝试了这个:

MasterDetailPage MDPage = new MasterDetailPage();
MDPage.Detail = new NavigationPage(new PageA());
MDPage.IsPresented = false;
Run Code Online (Sandbox Code Playgroud)

提前致谢.

编辑 这是我的代码:

MasterPage.cs

public ListView ListView { get { return listView; } }

        ListView listView;
        public MasterPage()
        {
            var masterPageItems = new List<MasterPageItem>();
            masterPageItems.Add(new MasterPageItem
            {
                Title = "Settings",
                //IconSource = "Settings.png",
                TargetType = typeof(TestPage)
            });

            listView = new ListView
            {
                ItemsSource = masterPageItems,
                ItemTemplate = new DataTemplate(() =>
                {
                    var imageCell = new ImageCell();
                    imageCell.SetBinding(TextCell.TextProperty, "Title");
                    imageCell.SetBinding(ImageCell.ImageSourceProperty, "IconSource");
                    return imageCell;
                }),
                VerticalOptions = LayoutOptions.FillAndExpand,
                SeparatorVisibility = SeparatorVisibility.None
            };

            Padding = new Thickness(0, 40, 0, 0);
           // Icon = "hamburger.png";
            Title = "Menu";
            BackgroundColor = Color.FromHex("#4F6276");

            Content = new StackLayout
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                Children = {
                    listView
                }
            };
        }
Run Code Online (Sandbox Code Playgroud)

MasterDetailsPage:

 public class MainPage : MasterDetailPage
    {
        public MainPage()
        {
            MasterPage masterPage;
            masterPage = new MasterPage();
            Master = masterPage;
            Detail = new NavigationPage(new TestPage())
            {
                //Tint = Color.Red // put your color here
                BarBackgroundColor = Color.FromRgb(172, 183, 193),//Color.FromHex("#9E9E9E"),
                BarTextColor = Color.Black,
                BackgroundColor = Color.White
            };
        }
     }
Run Code Online (Sandbox Code Playgroud)

TestPage:

public class TestPage : ContentPage
    {
        public TestPage()
        {
            Button test = new Button();
            test.Clicked += test_Clicked;
            test.Text = "Save";
            Button test1 = new Button();
            test1.Clicked += test1_Clicked;
            test1.Text = "cancel";
            Content = new StackLayout
            {
                Children = {
                    test,
                    test1
                }
            };
        }

        void test_Clicked(object sender, EventArgs e)
        {
            //redirect to new page(Page1)
        }
        void test1_Clicked(object sender, EventArgs e)
        {
            //redirect to new page(Page2)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想从onclick事件重定向到新页面说page1.我该如何实现这一目标?

Mik*_*nin 5

保存设置后,您应该更改现有 MasterDetailPage实例的详细信息.

我认为最简单,最清晰的方法是使用MessagingCenter:

在设置页面中:

MessagingCenter.Send(new OpenMyPageMessage(), OpenMyPageMessage.Key);
Run Code Online (Sandbox Code Playgroud)

您的主要详细信息页面:

protected override void OnAppearing()
{
    MessagingCenter.Subscribe<OpenMyPageMessage>(this, OpenMyPageMessage.Key, (sender) =>
        {
            Detail = new YourAnotherPage();
        });
}

protected override void OnDisappearing()
{
    MessagingCenter.Unsubscribe<OpenMyPageMessage>(this, OpenMyPageMessage.Key);
}
Run Code Online (Sandbox Code Playgroud)

而且OpenMyPageMessage只是一个简单的课程:

public class OpenMyPageMessage
{
    public static string Key = "OpenMyPageMessage";
}
Run Code Online (Sandbox Code Playgroud)

结果: 预习