Mvvm 如何正确保存页面的viewmodel以处理逻辑删除

Mvvm 如何正确保存页面的viewmodel以处理逻辑删除,mvvm,windows-phone-7,tombstoning,Mvvm,Windows Phone 7,Tombstoning,我正在构建一个WP7应用程序,现在我正着手处理其中的墓碑部分 我正在做的是,当NavigatedFrom事件发生时,将页面的viewmodel保存在page.State包中,并在NavigatedTo中读取它(通过一些检查来检测我是应该从包中读取还是从应用程序的真实实时数据中读取) 首先,我的虚拟机只是域模型的包装器 public string Nome { get { return _dm.Nome; }

我正在构建一个WP7应用程序,现在我正着手处理其中的墓碑部分

我正在做的是,当NavigatedFrom事件发生时,将页面的viewmodel保存在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;
现在它起作用了,但我不确定这是否是正确的方法

Thx
Simone

任何瞬态信息都应保留在应用程序中。停用事件,然后在应用程序中恢复。激活事件用于墓碑记录支持

如果需要在应用程序会话之间存储任何内容,则可以使用application.Closing事件,但根据需要存储的内容,您可以随时存储它。同样,根据需要存储的内容,您可以在Application.Launching事件中还原它,也可以在需要时读取它

您所采取的方法完全取决于应用程序的需求,存储数据的方法和位置也取决于您(一般认为,到隔离存储的二进制序列化是最快的)


我不知道你申请的细节,但是,如果您希望实现对逻辑删除的支持,则在NavigatedFrom/NavigatedTo中保存和还原数据不太可能是正确的做法。

任何瞬态信息都应保留在应用程序中。停用事件,然后在应用程序中还原。激活事件用于逻辑删除支持

如果需要在应用程序会话之间存储任何内容,则可以使用application.Closing事件,但根据需要存储的内容,您可以随时存储它。同样,根据需要存储的内容,您可以在Application.Launching事件中还原它,也可以在需要时读取它

您所采取的方法完全取决于应用程序的需求,存储数据的方法和位置也取决于您(一般认为,到隔离存储的二进制序列化是最快的)


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

我建议不要复制部分模型,因为逻辑删除需要(可能)保留完整的(应用程序级别)处理逻辑删除时的模型和页面级副本


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

我建议不要复制部分模型,因为在进行逻辑删除时,您(可能)需要保留完整(应用程序级)模型和页面级副本


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

application.Activated/Deactivated是处理逻辑删除的好地方

查看为什么OnNavigatedTo/From可能不适合您的需要


Application.Activated/Deactivated是处理墓志铭的好地方

查看为什么OnNavigatedTo/From可能不适合您的需要