PhoneApplicationService.Current.State vs IsolatedStorageSettings Windows Phone

Мне нужно передать большой набор данных с одной страницы на другую. Насколько мне известно, у меня есть два варианта: PhoneApplicationService и IsolatedStorageSettings.

PhoneApplicationService создает большую задержку при передаче между страницами. Итак, я использовал IsolatedStorageSettings, но у меня возникает ненормальное создание объекта при удалении элемента из IsolatedStorageSettings.

что лучше всего подходит для работы с большими сложными объектами?

Что на самом деле происходит при удалении элементов из IsolatedStorageSettings?

Спасибо

РЕДАКТИРОВАТЬ: когда я очищаю или удаляю элемент из IsolatedStorageSettings, создаются новые объекты для уже сохраненных ключей.

образец кода:

                if (IsolatedStorageSettings.ApplicationSettings.Remove("FormFields"))
                {
                    IsolatedStorageSettings.ApplicationSettings.Add("FormFields", app.response);                       
                }
                else
                {
                    IsolatedStorageSettings.ApplicationSettings.Add("FormFields", app.response);                      
                }

person Pradeep AJ- Msft MVP    schedule 22.09.2014    source источник
comment
Итак, использование IsolatedStorage записывает данные в хранилище (что подразумевается). Это означает, что данные, по сути, являются постоянными и записываются на диск, что вызывает задержки записи на диск. То, что вы действительно ищете, называется ViewModel в сочетании с ServiceLocator. Этот шаблон позволяет вам иметь одно место, в котором хранятся (в основном) синглтоны определенных классов (ViewModels), в которых хранятся данные, необходимые представлению. Вы должны проверить MvvmLight, так как они обеспечивают очень простую реализацию ViewModel и ServiceLocator, которые должны быть переносимыми (поскольку вы включили и WP7, и WP8).   -  person Nate Diamond    schedule 22.09.2014
comment
Спасибо, Нейт. Да, то, что вы говорите, верно, я уже реализовал поддержку ViewModels, поэтому теперь переход на другой метод требует много работы, но я просто ищу, какой из них является лучшим способом перехода с одной страницы на другую.   -  person Pradeep AJ- Msft MVP    schedule 23.09.2014
comment
Тогда ключевым является ServiceLocator. Это позволяет вам легко сказать что-то вроде ViewModelLocator.MyPageVM. Тогда вам не нужно передавать ссылку между страницами; они могут просто получить их статически.   -  person Nate Diamond    schedule 23.09.2014


Ответы (1)


Почему бы вам просто не использовать класс App?

public partial class App : Application
{
    public YourDataObject ApplicationDataObject { get; set; }
}

Вы можете использовать его на любой странице, например, для установки значений перед переходом на следующую страницу:

 (Application.Current as App).ApplicationDataObject = new YourDataObject();

И получение значений, когда вы находитесь на нужной странице:

YourDataObject yourData = (Application.Current as  App).ApplicationDataObject;

Это не красиво, но очень просто и, возможно, в вашем случае это лучшее решение.

person Gooseman    schedule 23.09.2014
comment
Вы имеете в виду, что это быстро и просто по сравнению с State и IsolatedStorage? Мне нужен лучший и оптимизированный способ. Спасибо - person Pradeep AJ- Msft MVP; 23.09.2014
comment
@PradeepAJ Это так же быстро и просто, как присвоить значения глобальным переменным. В этом случае глобальной переменной будет ApplicationDataObject, если вам не нужны значения, вы можете установить нулевое значение, и GC должен освободить память. - person Gooseman; 23.09.2014
comment
да, это лучший способ для моей текущей реализации. Спасибо - person Pradeep AJ- Msft MVP; 23.09.2014