从数据库数据创建的Xamarin Shell弹出按钮

从数据库数据创建的Xamarin Shell弹出按钮,shell,xamarin,flyout,Shell,Xamarin,Flyout,我有一个应用程序的列表和每个列表中的项目。列表及其项存储在两个表中。列表数据类似于“杂货店”,列表项目类似于“香蕉”等。您可以在应用程序中添加列表和项目。现在我有一个列表内容页面,列出了列表名称。点击其中一个,您将进入该列表中项目的内容页。这是可行的,但我想用AppShell.xaml.cs文件中数据库查询的列表名填充Shell弹出按钮。我想这样做: ShellSection shell_section = new ShellSection();

我有一个应用程序的列表和每个列表中的项目。列表及其项存储在两个表中。列表数据类似于“杂货店”,列表项目类似于“香蕉”等。您可以在应用程序中添加列表和项目。现在我有一个列表内容页面,列出了列表名称。点击其中一个,您将进入该列表中项目的内容页。这是可行的,但我想用AppShell.xaml.cs文件中数据库查询的列表名填充Shell弹出按钮。我想这样做:

                ShellSection shell_section = new ShellSection();

                var lists = await SLOMBListDataStore.GetSLOMBListsAsync(true);
                foreach (var list in lists)
                {
                    shell_section.Title = list.ListName;
                    shell_section.Icon = "tab_feed.png";
                    shell_section.Items.Add(new ShellContent() { Content = new SLOMBListDataPage(new SLOMBListDataViewModel(list.id)) });
                    this.Items.Add(shell_section);
                }

                BindingContext = this;
            

顺便说一句,这是行不通的。如果我使用shell_section1、shell_section2等,则可以手动创建条目,但是您必须对列表进行硬编码。是否可以执行我想要的操作,从查询数据创建弹出按钮?谢谢

尝试将初始化代码放入for循环,如:

var lists = await SLOMBListDataStore.GetSLOMBListsAsync(true);
foreach (var list in lists)
{
    ShellSection shell_section = new ShellSection();

    shell_section.Title = list.ListName;
    shell_section.Icon = "tab_feed.png";
    shell_section.Items.Add(new ShellContent() { Content = new SLOMBListDataPage(new SLOMBListDataViewModel(list.id)) });
    this.Items.Add(shell_section);
}

每个记录都需要一个新实例。

每次都使用相同的ShellSection。你需要在循环内创建它,而不是在循环外我必须在每个循环中销毁对象。我不知道该怎么做。谷歌说给垃圾收集器打电话是个坏主意。我希望当我把它添加到物品中时,我可以重复使用它。你为什么要这样做?您仍在项目集合中使用它。把它移到圈里,我现在很尴尬。我仍然有让数据库正常工作的问题,但当我列出一个演示对象列表时,一切都很好。谢谢你的快速回复。这是杰森在上面的评论中说的。这就是答案。现在一切都好了。谢谢