【问题标题】:Item added to ObservableCollection lost on Navigate添加到 ObservableCollection 的项目在导航时丢失
【发布时间】:2016-07-29 00:44:37
【问题描述】:

从 Template10 Hamburger 模板开始,我有一个用于管理食谱的典型主/详细场景。数据结构是RecipeBox 包含RecipeGroups,其中包含Recipes。这里有一些 UI 可以让您更好地了解:

我有一个 AppBarButton 链接到一个方法来向集合中添加一个新的食谱。这是一个非常简单的方法:

private async Task createNewRecipe()
{
    NewNamedItemDialog dialog = new NewNamedItemDialog("Enter New Recipe Name");
    await dialog.ShowAsync();

    Recipe newRecipe = new Recipe(dialog.TextEntry);            
    currentGroup.Recipes.Add(newRecipe);
    SelectedRecipe = newRecipe;

   // goToRecipeView();
}

请注意,我已将最后一行注释掉。当它运行时,NavigationService.Navigate(typeof(DetailPage), newRecipe) 将正确显示带有新配方对象的详细视图,但集合不会更新。当我从 DetailView 返回时,Recipe 尚未添加到组中。只需禁用即时导航即可正确更新ObservableCollection<RecipeGroup>

如何触发集合的更新并仍然执行即时导航来编辑我的新项目?

为什么NavigationService.Navigate 会中断我本地对象的更新?

!!!下面更新了部分!!!

这是一个简单的例子,说明我在这个领域缺乏知识。这个项目有一个简单的 Key-Value 类,起始页显示了应用启动时创建的这些类的简单列表:

Sample Project

当应用程序启动时,它会在 GridView 中显示两个项目,您可以选择一个进行编辑,也可以添加一个新项目(直接将您带到 DetailPage 进行编辑)。

DetailPage 只是显示一个文本框来编辑值:

由于我处理了 AppBarButton 的点击,我可以将选定的 DataItem 作为参数传递给 DetailPage。这引发了我仍在努力解决的这些问题。

  1. 我可以将信息作为参数传递给NavigationService.Navigate(),因此在浏览方法时我声明我可以传递数据——但是当用户单击后退按钮时我该怎么做呢?我尝试了类似的方法,在OnNavigatingFrom() 中添加参数,但运气不佳。

  2. Jerry 曾声明in this post 用于传递参数的序列化服务的大小限制约为 8 Kb,当然有些对象不能很好地序列化。他推荐了一个“会话缓存”来处理这种对我来说没有警钟的情况。在 UWP 应用的页面之间传递大型或复杂对象的推荐最佳做法是什么?

【问题讨论】:

  • 应用程序/页面状态、SQLite、JSON 文件都是可行的解决方案......带有ObservableCollection<RecipeGroup> 的地狱 SettingServices 可以工作。将其视为具有复杂性的舒适度的函数......显然 SQLite 可能会过大
  • 我有一个将数据保存到 Json 文件的服务,我的问题是运行时对象正在更新,Template10 NavigationService 似乎中断了它。
  • 使用您发布的代码,很难说您为什么会遇到这个问题。您能否分享更多详细信息,例如您在哪里定义 ObservableCollection 以及如何将它与 createNewRecipe 方法一起使用? minimal reproducible example 会更好。

标签: uwp observablecollection template10


【解决方案1】:

实际上,尼克松先生在this post 中澄清了这个问题,抱歉我没有早点找到它。

它并没有完全回答我最初的问题,但它为我提供了足够的信息来解决这个问题。

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多