2011-01-07 70 views
1

我正在构建一个WP7应用程序,现在我正在处理它的墓碑部分。如何正确保存页面的viewmodel来处理墓碑

我正在做的是当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; 

而现在它的工作原理,但我不确定这是否正确。

THX 西蒙

回答

2

在任何瞬时状态信息应在Application.Deactivated事件被保留,然后在Application.Activated事件墓碑支持恢复。

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

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

我不知道你的应用程序的细节,但是如果你想实现对立碑的支持,在NavigatedFrom/NavigatedTo中保存和恢复数据不太可能是正确的。

1

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

Again最合适的解决方案将取决于您的应用程序和它使用的模型的复杂性。