UWP Template10 Frame.Navigate с параметром вызывает ошибку

Разрабатывал проект UWP с использованием Intense Templates (образец SplitView), затем я переключился на Template10 (Hamburger). И кажется, есть ошибка, когда я пытаюсь передать параметр

param is string with value something like this - (d5d05a3b-546a-4ca6-a345-74e333fa00fb) Frame.Navigate(typeof(EditPage),param);

Ошибка выглядит примерно так: ErrorPicture И затем, если моя страница редактирования не работает правильно param, он отправит пользователя обратно (Frame.GoBack()), теперь я получаю сообщение об ошибке, например

An exception of type 'System.Runtime.InteropServices.COMException' occurred in App6.exe but was not handled in user code
Additional information: Error HRESULT E_FAIL has been returned from a call to a COM component.

person J.Duck    schedule 23.05.2016    source источник
comment
Привет и добро пожаловать в Stack Overflow. Очень сложно отлаживать словесное описание вашего кода :) Не могли бы вы отредактировать свой вопрос и добавить соответствующие фрагменты кода, чтобы мы могли видеть, что у вас есть, и затем мы могли помочь вам отладить этот код. (не помещайте код в комментарии здесь, потому что форматирование ужасное) :)   -  person Taryn East    schedule 24.05.2016


Ответы (1)


основная причина вашей проблемы, если я догадался (и на основе строки исключения), заключается в том, что вы передаете на свою страницу сложный тип, который не может быть сериализован. Причина, по которой Template 10 хочет сериализовать ваш параметр, заключается в том, что он может правильно восстановить состояние навигации после приостановки вашего приложения. Я понимаю, что это неудобно, если вы ДОЛЖНЫ передавать несериализуемый объект, и поэтому вы обнаружите, что BootStrapper.SessionState (словарь) позволяет вам хранить объекты любого типа, требуя от вас только передачи ключа на страницу, которая может использовать SessionState + этот ключ для извлечения объекта.

Между прочим, это отличный паттерн, и, конечно, он не уникален для Шаблона 10. Единственное, что я бы добавил к нему, это то, что вы предполагаете, что объект отсутствует в словаре, и включаете защитный код для обработки этой ситуации. Причина в том, что эта ситуация может возникнуть, если ваше приложение было приостановлено.

Я надеюсь в этом есть смысл. И, не чувствуй себя плохо. Вы, конечно, не первый, кто задает этот вопрос.

var key = nameof(MyObject);
SessionState.Add(key, MyObject);
NavigationService.Navigate(typeof(Views.MainPage), key);
person Jerry Nixon    schedule 24.05.2016