【问题标题】:Xamarin Shell Flyout created from database data从数据库数据创建的 Xamarin Shell Flyout
【发布时间】:2020-12-16 22:15:16
【问题描述】:

我在每个列表中都有列表和项目的应用程序。该列表及其项目存储在两个表中。列表数据类似于“Grocery”,列表项类似于“bananas”等。您可以在应用程序中添加列表和项目。现在我有一个列出列表名称的列表内容页面。点击一个,您将转到该列表中项目的内容页面。这可行,但我想使用来自 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 等,则可以手动创建条目,但是您必须对列表进行硬编码。是否可以做我想做的事,从查询数据创建弹出窗口?谢谢

【问题讨论】:

  • 您每次都使用相同的 ShellSection。您需要在 inside 循环中创建它,而不是在 outside
  • 我必须在每个循环中销毁对象。我不知道该怎么做。谷歌表示调用垃圾收集器是个坏主意。我希望当我将它添加到项目时,我可以重复使用它。
  • 你为什么要这样做?您仍在 Items 集合中使用它。只需将其移动到循环内即可。
  • 好吧,我现在很尴尬。我仍然无法让数据库正常工作,但是当我列出一个演示对象列表时,一切正常。感谢您的快速回复..

标签: shell xamarin flyout


【解决方案1】:

尝试将初始化代码放入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);
}

您需要为每条记录创建一个新实例。

【讨论】:

  • 这就是 Jason 在上面的评论中所说的。这就是答案。现在一切正常。谢谢
猜你喜欢
  • 2021-04-18
  • 1970-01-01
  • 2011-01-26
  • 2021-05-07
  • 2018-11-13
  • 2023-04-10
  • 2012-11-26
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多