#windows-phone-7
#windows-phone-7
Вопрос:
Проект Windows Phone 7, над которым я работаю, имеет 2 пользовательских интерфейса и основной «движок» функциональности с некоторыми распространенными страницами. Я бы хотел, чтобы мой пользовательский интерфейс передавал объект на одну из этих общих страниц в базовой сборке.
В настоящее время я могу переходить к страницам в основной сборке из сборки пользовательского интерфейса. Однако, насколько я понимаю, каждая сборка имеет собственное изолированное хранилище, это правильно?
Если я могу совместно использовать изолированное хранилище, я могу это использовать, я просто не уверен, как заставить две сборки использовать его вместе.
Какова наилучшая практика?
Я попытался погуглить это: ‘wp7 передает объект между сборками’
Дополнительная информация:
Это будет 1 приложение с двумя сборками. Что-то вроде этого:
CustomerUI (проект)
— MainPage.xaml
— App.xaml
CoreFuncs (project)
— customerData.cs
— EditCustomer.xaml
SalesRepUI (проект)
— MainPage.xaml
— App.xaml
Как CustomerUI, так и SalesRepUI будут использовать страницу EditCustomer и объект customerData. Итак, на главной странице создается экземпляр объекта customerData, после чего пользователь может нажать «Редактировать пользователя», что приведет к переходу на общую страницу EditCustomer.xaml. Мы хотели бы передать уже созданный объект customerData. (Для целей этого обсуждения …)
Комментарии:
1. Извините, извините, я нашел то, что хотел, я слишком много думал.
PhoneApplicationService.Current.State["keyName"] = object;
это было именно то, чего я хотел. Не уверен, что это лучший способ, но для меня это работает. Просто добавьте туда мой класс настроек или что-то еще и перехватите его на другой стороне в коде page.xaml.
Ответ №1:
Насколько я знаю, существует одно изолированное хранилище для каждого приложения, а не для каждой сборки. Так что вы можете попробовать пропустить через него свои объекты, если хотите.
Ответ №2:
Это зависит от того, являются ли эти два отдельных приложения или две сборки?
Изолированное хранилище изолировано вокруг запущенного приложения. Это означает, что у каждого приложения есть свое собственное хранилище, к которому нельзя получить доступ из другого приложения. Единственными способами обмена данными между двумя приложениями являются:
-
Веб-сервис / или TCP-сервис в версии 7.5: вы должны загружать данные из одного приложения и загружать их в отдельное приложение.
-
Пользователь выполнял задачи: Копирование и вставка / Отправка электронного письма
Однако, если это всего лишь одно приложение, вы сможете получить доступ к изолированному хранилищу между сборками, просто прочитав и записав файлы. Единственное, о чем следует помнить, это блокировка файлов, убедитесь, что вы закрываете файлы, прежде чем пытаться читать из них из отдельной библиотеки dll / сборки.
Комментарии:
1. Хм … ладно, это было бы здорово. Однако я использую класс App.xaml.cs для изолированного хранилища, я получаю такие значения
return (Application.Current as UIAppName.App).ValueName;
. UIAppName будет ссылаться на возражение CoreClasses, но могут ли CoreClasses получать данные приложения из UIAppName?2. Итак, как насчет этого, у меня есть MainPage.xaml в UiApp, который может считывать значения из App.xaml. Затем пользователь переходит к CommonPage.xaml в сборке CoreFuncs. Когда загружается MainPage.xaml, я хотел бы прочитать настройки в области, где CommonPage.xaml может получить к ним доступ. Я думал о добавлении класса settings в CoreFuncs, что-то вроде CoreFuncs.AppSettings, в который CommonPage мог бы записывать. Я на правильном пути?
3. Если создать свой собственный класс для настроек и сериализовать / десериализовать его в изолированное хранилище. Ссылка на сериализацию: support.microsoft.com/kb/815813 Ссылка на изолированное хранилище: windowsphonegeek.com/tips/… Вы могли бы реплицировать этот класс в каждой сборке… ИЛИ вы могли бы создать библиотеку классов, на которую ссылаются обе сборки
Ответ №3:
Извините, извините, я нашел то, что хотел, я слишком много думал. PhoneApplicationService.Current.State["keyName"] = object;
это было именно то, чего я хотел. Не уверен, что это лучший способ, но для меня это работает. Просто добавьте туда мой класс настроек или что-то еще и перехватите его на другой стороне в коде page.xaml.
Ответ №4:
Я бы рекомендовал использовать класс Messenger в MVVM Light toolkit:http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx
Обе ваши сборки могут ссылаться на одну общую сборку; эта сборка может содержать тип, который вы используете для хранения данных, передаваемых через messenger.