1

我正在构建一个 WP7 应用程序,现在我正在处理它的墓碑部分。

我正在做的是在发生 NavigatedFrom 事件时将页面的视图模型保存在 Page.State 包中,然后在 NavigatedTo 中读取它(通过一些检查来检测我是应该从包中读取还是从真实的实时数据中读取)应用程序)。

首先,我的虚拟机只是域模型的包装器

public string Nome
    {
        get
        {
            return _dm.Nome;
        }
        set
        {
            if (value != _dm.Nome)
            {
                _dm.Nome= value;
                NotifyPropertyChanged("Nome");
            }
        }
    }

但这并不总是有效,因为当保存到包然后读回时,域模型没有正确反序列化。

然后我将我的 VM 实现更改为只是我需要从 DM 获得的属性的副本:

public string Nome
    {
        get
        {
            return _nome;
        }
        set
        {
            if (value !=nome)
            {
                _nome= value;
                NotifyPropertyChanged("Nome");
            }
        }
    }

并使用执行以下操作的构造函数:

_nome = dm.Nome;

现在它可以工作了,但我不确定这是否是正确的方法。

谢谢西蒙妮

4

3 回答 3

2

任何瞬态信息都应保存在 Application.Deactivated 事件中,然后在 Application.Activated 事件中恢复以支持墓碑。

如果您需要在应用程序会话之间存储任何内容,那么您可以使用 Application.Closing 事件,但根据您需要存储的内容,您可以在它更改时存储它。同样,根据您需要存储的内容,您可以在 Application.Launching 事件中恢复它,或者在需要时读取它。

您采用的方法完全取决于您的应用程序的要求,并且您存储数据的方法和位置也取决于您(通常接受到隔离存储的二进制序列化是最快的)。

我不知道您的应用程序的详细信息,但是如果您希望实现对墓碑的支持,那么在 NavigatedFrom/NavigatedTo 中保存和恢复数据不太可能是正确的选择。

于 2011-01-07T11:36:41.803 回答
1

我建议不要复制模型的一部分,因为在处理墓碑时,你(可能)需要保留完整的(应用程序级别)模型和页面级别的副本。

同样,最合适的解决方案将取决于您的应用程序的复杂性及其使用的模型。

于 2011-01-07T11:56:22.853 回答
1

Application.Activated/Deactivated 是处理墓碑的好地方。

在此处了解为什么 OnNavigatedTo/From 可能不适合您的需求。

如何正确处理应用程序停用和重新激活 - Peter Torr 的博客

Windows Phone 的执行模型概述

于 2011-01-08T03:43:43.887 回答