【问题标题】:Serialize VM vs state class序列化 VM 与状态类
【发布时间】:2012-02-10 01:17:44
【问题描述】:

在我对事件注册的疑惑之后(你可以在这里找到ViewModel Event Registration and ViewModel Lifetime),现在我正在考虑视图模型墓碑:

在 Tombstoning 的情况下,ViewModel 序列化是一个好方法吗? 我正在考虑不同视图模型引用同一类的情况。在 Viewmodels 序列化和反序列化的情况下,引用的类实例可能有重复的实例,不是吗?

最好有专门的状态类,其唯一目的是包含所有应用程序数据,每个视图模型从那里获取数据(我的意思是对数据的引用)并更新那里的数据,应用程序只考虑序列化那些专业课?

感谢您对此主题的任何经验。

问候 SkyG

【问题讨论】:

    标签: windows-phone-7 mvvm tombstoning


    【解决方案1】:

    Caliburn Micro 在框架中内置了很多这样的功能,允许您将视图模型或整个图形的属性保存到手机状态和应用程序设置中。您只需要创建一个类并从 StorageHandler 继承。

    public class PivotPageModelStorage : StorageHandler<PivotPageViewModel> 
    {  
        public override void Configure() 
        {  
            this.ActiveItemIndex().InPhoneState().RestoreAfterViewLoad();  
        }  
    }  
    

    对于您发布的其他问题。 CM 有一种很好的方式来处理手机上的强制视图优先方法。它允许您通过指定 VM 来进行页面导航,其余部分将由它处理。另外,如果您指定要传递的参数,CM 会将它们从查询字符串中提取出来并填充目标 VM 上的属性。

    public void GotoPageTwo() 
    {  
        navigationService.UriFor<PivotPageViewModel>().WithParam(x => x.NumberOfTabs, 5).Navigate();  
    }   
    

    【讨论】:

    • 我试过 caliburn.micro 一次,很有希望,只是发现它的约束力有点太大了。它的用途还可以,但我仍然对生产项目没有信心,我担心项目中间会出现一些意外,我现在更喜欢使用非常轻量级的工具包。可能值得看看 StorageHandler 如何工作以获得一些好主意,所以谢谢!
    • 它很轻,这就是为什么它被称为Micro :) 实际上,我相信作者正在研究你所说的。把东西分解成更小的部分,这样你就可以使用你想要的东西了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2015-09-06
    • 2020-06-07
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多