Silverlight 和应用程序状态
Posted
技术标签:
【中文标题】Silverlight 和应用程序状态【英文标题】:Silverlight and Application State 【发布时间】:2011-05-07 11:48:27 【问题描述】:我有一个 Silverlight 应用程序,它总是需要知道当前加载了哪些客户(域对象)。一次只能加载一个。如果 Customer 为 null,则当前没有加载 Customer。或者您退出了客户。我将拥有另外 3 个状态类型的属性,例如 Customer。所以……
在 Silverlight 应用程序中存储应用程序状态的最佳方式是什么?
1) 将公共属性添加到 App 类 (App.xaml.cs) 2)有一个状态对象,您可以通过您的 IoC 容器将其作为单例进行新建。向该对象添加公共属性 3) 还有其他想法吗?
【问题讨论】:
【参考方案1】:我遇到了类似的问题。当我使用 MEF 时,我创建了一个保存数据的服务。您可以在需要的地方导入服务并可以访问引用的对象。 (所以类似于2)
【讨论】:
服务如何“保存数据”?还是您的意思是服务存储和检索数据? 两者都可以。所以服务负责获取数据,它有一个存储当前加载的客户的属性(这就是我所说的“保存数据”)【参考方案2】:我会选择第二个选项。
目前正在开发存储域对象状态数据的 Silverlight 应用程序。
我们有所谓的 ApplicationManager,它通过 IoC 解析以存储参考数据和域数据。可能有比 ApplicationManager 更好的术语,但迄今为止还没有找到标准的命名约定。
这个概念很有效,我们所有的视图模型都可以访问 ApplicationManager,所以当应用程序的另一部分需要采取行动时,我们传递的只是实体 ID。
如果您有更新数据的异步操作,则需要注意保持 UI 和数据存储一致
【讨论】:
【参考方案3】:我的投票是您的第二个选项,即拥有一个状态对象单例。如果您使用 MVVM 和 Silverlight 工具包,那么您将在 MainViewModel 中内置一个,它是静态的,并且在 ViewModelLocator 中静态初始化。那将是实现您想要的结果的理想场所。
【讨论】:
以上是关于Silverlight 和应用程序状态的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 故障传播和 UserNamePasswordValidator
Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)
Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)