从Template10汉堡包模板开始,我有一个典型的主/细节方案来管理食谱。数据结构是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)
将使用新的Recipe对象正确显示详细视图,但不会更新该集合。当我从DetailView返回时,配方尚未添加到组中。只需禁用即时导航即可正确更新ObservableCollection<RecipeGroup>
。
如何触发更新集合并仍然执行即时导航以编辑我的新项目?
为什么NavigationService.Navigate
会中断本地对象的更新?
!!!更新了以下部分!!!
这是一个简单的例子,展示了我在这个领域缺乏知识。这个项目有一个简单的Key-Value类,起始页面显示了在启动应用程序时创建的简单列表:
当应用程序启动时,它会在GridView中显示两个项目,您可以选择一个进行编辑,也可以添加一个新项目(直接将您带到DetailPage进行编辑)。
DetailPage只显示一个TextBox来编辑值:
由于我处理了AppBarButton的点击,我可以将选定的DataItem作为参数传递给DetailPage。这提出了我仍在努力解决的这些问题。
我可以将信息作为参数传递给NavigationService.Navigate()
,因此在浏览方法时我声明我可以传递数据 - 但是当用户点击后退按钮时该怎么做?我尝试了类似的方法,在OnNavigatingFrom()
中添加参数而没有太多运气。
Jerry已经声明in this post,用于传递参数的序列化服务的大小限制大约为8 Kb,当然有些对象没有很好地序列化。他推荐了一个“会话缓存”来处理这种不会给我敲钟声的情况。在UWP应用程序中的页面之间传递大型或复杂对象的建议最佳做法是什么?