Начиная с шаблона Template10 Hamburger, у меня есть типичный сценарий master/detail для управления рецептами. Структура данных RecipeBox содержит RecipeGroups, которые содержат рецепты. Вот немного пользовательского интерфейса, чтобы дать вам лучшее представление:
У меня есть 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()
без особой удачи.Джерри заявил в этом сообщении, что служба сериализации, используемая для передачи параметров, имеет ограничение размера около 8 КБ, и, конечно, некоторые объекты плохо сериализуются. Он порекомендовал «сеансовый кеш» для работы с такими ситуациями, что мне не звонит в колокольчик. Что рекомендуется для передачи больших или сложных объектов между страницами в приложении UWP?
ObservableCollection<RecipeGroup>
будут работать. Думайте об этом как о функции уровня комфорта со сложностью... Очевидно, что SQLite, вероятно, будет излишним. - person mvermef   schedule 31.07.2016ObservableCollection
и как вы используете его с методомcreateNewRecipe
? минимально воспроизводимый пример был бы лучше. - person Jay Zuo   schedule 01.08.2016