我正在通读 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
将为 false,因此我们知道我们想要重建 View 模型。
我的问题是:为什么要在 nếu như
block 之外加载 transient ?如果我们的内存没有被丢弃(即应用程序没有被逻辑删除),我们不能继续使用旧的 View 模型而不重新加载它的状态吗?
应始终在导航到页面时加载 transient 状态,还是仅在从逻辑删除状态恢复时加载 transient 状态?
我不熟悉这本书,而且从您展示的代码来看,很难说这是否正确。这归结为 LoadTransientState
实际执行的操作。
您要采取的处理逻辑删除的方法是确保(只要它在应用程序中有意义*)应用程序/页面在用户返回时应处于与离开时相同的状态。
因此,如果 LoadTransientState
只关心逻辑删除时信息的持久性,那么将它移到 nếu như
block 内可能是合适的。
如果它处理某些其他形式的 transient 数据,则可能不会。
希望 LoadTransientState
将包含一些逻辑,以确保它不会设置(或重置)内部已经存在(或已经设置)的数据,从而避免不必要地调用的任何预期后果。
*一些明显的异常(exception)是实时数据、计时器(可能)、实时信息等。
Tôi là một lập trình viên xuất sắc, rất giỏi!