2016-07-29 52 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這個清除了,對不起,我還沒有找到它。

它不完全回答我的原始問題,但它給我足夠的信息來解決這個問題。

相關問題