2016-07-29 95 views
0

从Template10汉堡模板开始我有一个典型的主/细节方案来管理配方。数据结构是RecipeBox包含RecipeGroups其中包含Recipes。这是一个有点UI的给你一个更好的主意:添加到ObservableCollection的项目在导航中丢失

RecipeMaster 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返回时,配方尚未添加到组中。只需禁用即时导航,就可以正确更新ObservableCollection<RecipeGroup>

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

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

!!!更新下面的部分!

下面是一个简单的例子,展示了我在这个领域缺乏知识。这个项目有一个简单的键值类,并开始页面显示是当应用启动创建的这些简单的列表:

Sample Project

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

Start Grid View

的DetailPage简单地显示文本框以编辑值:

Detail Page View

由于我处理AppBarButton的点击我可以通过所选择的DataItem到DetailPage作为参数。这提出了我仍在努力解决的这些问题。

  1. 通过我声明我可以传递数据的方法进行浏览时,我可以作为参数传递信息NavigationService.Navigate(),所以 - 但我怎么做,当用户单击后退按钮?我试图通过在OnNavigatingFrom()中添加参数而没有太大的运气来尝试类似的方法。

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

+0

应用程序/页面状态,SQLite,JSON文件所有可行的解决方案....具有'ObservableCollection '的地狱SettingServices将工作。把它看作是舒适度和复杂度的函数......很明显SQLite可能会过度消耗 – mvermef

+0

我有一个服务来保存数据到Json文件,我的问题是运行时对象被更新,Template10 NavigationService似乎打断了这个。 –

+0

随着你发布的代码,很难说为什么你有这个问题。你能不能分享一些更多的细节,比如你定义ObservableCollection的地方以及你如何使用createNewRecipe方法来使用它? [mcve]会更好。 –

回答

0

其实尼克松先生在this post这个清除了,对不起,我还没有找到它。

它不完全回答我的原始问题,但它给我足够的信息来解决这个问题。

相关问题