c# - Master和Detail must be set before adding MasterDetailPage to a container 错误在Xamarin forms中

标签 c# xaml mvvm xamarin.forms

我有一个 xamarin 表单应用程序。布局是使用自定义 rootpage.cs 文件创建的。它具有用于导航页面的导航菜单。在 App.cs 文件中通过

重定向到根页面

MainPage = new RootPage();

在 rootPage 类文件中

Dictionary<MenuType, NavigationPage> Pages { get; set; }
    public RootPage()
    {
        Pages = new Dictionary<MenuType, NavigationPage>();
        Master = new MenuPage(this);
        BindingContext = new BaseViewModel
        {
            Title = "Manager",
            Icon = "icon.png"
        };
        NavigateAsync(MenuType.Home);
        InvalidateMeasure();
    }
    public async Task NavigateAsync(MenuType id)
    {
        Page newPage;
        if (!Pages.ContainsKey(id))
        {
            switch (id)
            {
                case MenuType.Home:
                    Pages.Add(id, new NavigationPage(new HomePage()));
                    break;
                case MenuType.AboutUs:
                    Pages.Add(id, new NavigationPage(new ContactUsPage()));
                    break;
            }
        }
        newPage = Pages[id];
        if (newPage == null)
            return;
        Detail = newPage;
        IsPresented = false;
    }

在菜单页面类文件中有以下代码

RootPage root;
    public MenuPage(RootPage _root)
    {
        root = _root;
        InitializeComponent();
        List<HomeMenuItemModel> menuItems;
        BindingContext = new BaseViewModel
        {
            Title = "Sample App",
            Subtitle = "Sample App",
            Icon = "icon.png"
        };
        ListViewMenu.ItemsSource = menuItems = new List<HomeMenuItemModel>
            {
              new HomeMenuItemModel { Title = "Home", MenuType = MenuType.Home, Icon ="icon.png" },
              new HomeMenuItemModel { Title = "Contact Us", MenuType = MenuType.ContactUs, Icon ="icon.png" },
              new HomeMenuItemModel { Title = "About Us", MenuType = MenuType.AboutUs, Icon ="icon.png" },
            };
        ListViewMenu.SelectedItem = menuItems[0];
        ListViewMenu.ItemSelected += async (sender, e) =>
        {
            if (ListViewMenu.SelectedItem == null)
                return;
            if (e.SelectedItem != null)
                await this.root.NavigateAsync(((HomeMenuItemModel)e.SelectedItem).MenuType);
            ListViewMenu.SelectedItem = null;
        };
    }

HomePage.xaml 只是一个内容页面。 应用程序首次运行时显示错误“在将 MasterDetailPage 添加到容器错误之前必须设置 Master 和 Detail” 我是 xamarin 的新手。您能否为此提出一个解决方案。

最佳答案

错误实际上就是发生了什么。您需要同时设置 MasterDetail MasterDetailPage 的属性在将其添加到容器页面之前,例如 NavigationPage。

关于c# - Master和Detail must be set before adding MasterDetailPage to a container 错误在Xamarin forms中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43798081/

相关文章:

C#:无法看到 Windows 注册表中的更改

c# - wpf中的椭圆形按钮

c# - 将数据传递到数据层

使用 DataTemplate 的 ListBox 的 WPF 双向绑定(bind)

c# - 将 XAML 转换为 C#

wpf - MVVM:处理集合中模型的逻辑子对象

android - 使用 MVVM kotlin 进行 Firebase 身份验证

c# - Function 还是 async 可以细化吗?

c# - 有条件地忽略属性序列化

c# - 使用 Microsoft.Office.Interop.Excel 导出时我是否正确关闭了 excel 文件