4

我正在阅读 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块外加载瞬态?如果我们的内存没有被丢弃(即应用程序没有被墓碑化),我们就不能继续使用旧的视图模型而不重新加载它的状态吗?

导航到页面时是否应该始终加载瞬态状态,还是仅在从墓碑状态恢复时加载?

4

1 回答 1

1

我不熟悉这本书,从你展示的代码中很难说这是否正确。它归结为LoadTransientState实际做了什么。

您要采取的处理墓碑的方法是确保(只要它在应用程序中有意义*)应用程序/页面在用户返回时应处于与离开时相同的状态。

因此,如果LoadTransientState只关心墓碑时信息的持久性,那么将其移动到if块内可能是合适的。
如果它处理某种其他形式的瞬态数据,那么可能不会。

希望LoadTransientState将包含一些逻辑以确保它不会设置(或重置)内部已经存在(或已设置)的数据,因此将避免被不必要地调用的任何预期后果。

*一些明显的例外是实时数据、计时器(可能)、实时信息等。

于 2012-05-09T08:21:15.627 回答