【发布时间】: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 类,起始页显示了应用启动时创建的这些类的简单列表:
当应用程序启动时,它会在 GridView 中显示两个项目,您可以选择一个进行编辑,也可以添加一个新项目(直接将您带到 DetailPage 进行编辑)。
DetailPage 只是显示一个文本框来编辑值:
由于我处理了 AppBarButton 的点击,我可以将选定的 DataItem 作为参数传递给 DetailPage。这引发了我仍在努力解决的这些问题。
我可以将信息作为参数传递给
NavigationService.Navigate(),因此在浏览方法时我声明我可以传递数据——但是当用户单击后退按钮时我该怎么做呢?我尝试了类似的方法,在OnNavigatingFrom()中添加参数,但运气不佳。Jerry 曾声明in this post 用于传递参数的序列化服务的大小限制约为 8 Kb,当然有些对象不能很好地序列化。他推荐了一个“会话缓存”来处理这种对我来说没有警钟的情况。在 UWP 应用的页面之间传递大型或复杂对象的推荐最佳做法是什么?
【问题讨论】:
-
应用程序/页面状态、SQLite、JSON 文件都是可行的解决方案......带有
ObservableCollection<RecipeGroup>的地狱 SettingServices 可以工作。将其视为具有复杂性的舒适度的函数......显然 SQLite 可能会过大 -
我有一个将数据保存到 Json 文件的服务,我的问题是运行时对象正在更新,Template10 NavigationService 似乎中断了它。
-
使用您发布的代码,很难说您为什么会遇到这个问题。您能否分享更多详细信息,例如您在哪里定义
ObservableCollection以及如何将它与createNewRecipe方法一起使用? minimal reproducible example 会更好。
标签: uwp observablecollection template10