Должно ли переходное состояние всегда загружаться при переходе на страницу или только при выходе из состояния захоронения?

Я читаю Windows Phone 7.5 Unleashed, и есть много кода, который выглядит так (в коде для страницы):

bool loaded;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (!loaded)
    {
        DataContext = new SomePageViewModel(State);
        loaded = true;
    }

    ((SomePageViewModel)DataContext).LoadTransientState();

    ...
}

...

Идея состоит в том, что loaded будет ложным при выходе из состояния захоронения, поэтому мы знаем, что хотим перестроить модель представления.

Мой вопрос: зачем загружать переходное состояние за пределы блока if? Если наша память не была выброшена (т. е. приложение не было захоронено), не можем ли мы просто продолжать использовать старую модель представления, не перезагружая ее состояние?

Должно ли переходное состояние всегда загружаться при переходе на страницу или только при выходе из состояния захоронения?


person Matthew    schedule 08.05.2012    source источник


Ответы (1)


Я не знаком с книгой, и по коду, который вы показали, трудно сказать, правильно это или нет. Все сводится к тому, что на самом деле делает LoadTransientState.

Подход, который вы хотите использовать для обработки захоронения, заключается в том, чтобы (при условии, что это имеет смысл в рамках приложения*) приложение/страница находились в том же состоянии, когда пользователь возвращается к нему, как и при выходе.

Итак, если LoadTransientState касается только сохранения информации во время захоронения, то может быть уместно переместить его внутрь блока if.
Если он имеет дело с какой-то другой формой временных данных, то, вероятно, нет.

Надеемся, что LoadTransientState будет содержать некоторую логику, чтобы убедиться, что он не устанавливает (или не сбрасывает) данные, которые уже существуют (или были установлены) внутри, и, таким образом, избегает любых предполагаемых последствий ненужного вызова.

* Некоторыми очевидными исключениями являются оперативные данные, таймеры (возможно), информация в реальном времени и т. д.

person Matt Lacey    schedule 09.05.2012