#c# #silverlight #windows-phone-7
#c# #silverlight #windows-phone-7
Вопрос:
У меня есть приложение Silverlight для Windows Phone. Когда приложение завершит работу, я хочу сохранить текущую модель представления. Во-первых, где мне сохранить модель представления?
- Служба приложений телефона (я не знаю, когда это появится / умрет)
- Изолированное хранилище
Я почти уверен, что мне следует сохранить свою модель представления в изолированном хранилище. Моя проблема в том, что я получаю сообщение об ошибке при попытке поместить его в изолированное хранилище. Ошибка гласит:
Тип ‘MyViewModel’ не может быть сериализован. Подумайте о том, чтобы пометить ее атрибутом DataContractAttribute и пометить все ее элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.
Моя проблема в том, что у меня МНОГО участников в этой модели представления. В то же время у него есть дочерние объекты, у которых также есть члены. Такое ощущение, что это загрязняет мой код. Кажется странным, что я могу успешно разместить модель представления в PhoneApplicationService без каких-либо проблем. Однако я получаю эту ошибку только при попытке поместить ее в изолированное хранилище.
Как мне преодолеть это? Я просто хочу сохранить модель представления во время надгробия. Спасибо!
Комментарии:
1. Сколько состояний вы храните в своей виртуальной машине? В идеале вы должны иметь возможность создать новую виртуальную машину с сохраненным объектом Model.
Ответ №1:
Состояние PhoneAppService не сохранит данные, если приложение завершит работу через некоторое время после того, как оно было захоронено. Хранилище Iso — это дисковое хранилище, тогда как PhoneAppService.Состояние — это всего лишь словарь переходного состояния, который переживает надгробие.
Ответ №2:
Создание надгробий в реальном мире в Silverlight для Windows Phone от Джеффа Просиса должно рассказать вам практически все, что вам нужно знать о надгробиях.
Ответ №3:
Во-первых, вам действительно нужно сохранять всю виртуальную машину? Возможно, это то, что вам нужно для вашего приложения; но я бы все же попросил вас рассмотреть возможность сохранения только тех битов, которые вам абсолютно необходимы, и повторно создавать экземпляры вашей виртуальной машины по мере необходимости. Тем не менее, изолированное хранилище — это то, куда вы можете поместить что-то для сохранения.
Вы могли бы использовать класс IsolatedStorageSettings для хранения данных типа пары ключ-значение. Кроме того, пожалуйста, смотрите здесь полное пошаговое руководство по созданию надгробий. В обучающем наборе есть класс IsolatedStorageHelper, который вы могли бы использовать. Он использует сериализатор / десериализатор Json и должен работать с большинством классов со свойствами стандартного типа. В Codeplex здесь также есть помощник Tombstone, который может вам подойти.
Надеюсь, это поможет!
Комментарии:
1. Почему бы не использовать «PhoneApplicationService. Текущий. Указать «вместо IsoStorage?
2. @vidalsasoon .. Я думаю, вы могли бы. Но для вас это просто состояние сохранения операционной системы, верно? Лично я всегда использовал необходимые события для самостоятельного управления постоянным состоянием в изолированном хранилище.