MVVM:在ViewModels之间共享数据
如何在多个ViewModel之间共享数据?
例如,在应用程序中有一个名为Project的类。
public class Project : ModelBase { private string _projectName; public string ProjectName { get { return _projectName; } set { _projectName = value; RaisePropertyChanged(() => ProjectName); } } }
在多个ViewModels应用程序中应该访问ActiveProject。
在ViewModels之间共享Project的最佳方法是什么?
我之前使用过Messaging但它需要很多编码。 对于所有ViewModel,我要创建ActiveProject属性,还必须注册一个messenger来更新它。
我使用MVVM Light框架。
任何代码示例将不胜感激。
我将创建一个ViewModel,作为所有Project ViewModel的父级。 (我们称之为解决方案)
解决方案ViewModel将具有属性ActiveProject和可观察的项目集合。
我会推荐Mediator Pattern。 我之前在VM之间使用了一个EventAggregator这种类型的消息传递,但实际上并没有多少。
不要,不要。 不要在MVVM应用程序中以这种方式使用单例。 实际上,Project类应该是ViewModel的模型。 只需在vm的构造函数中传递它。 如果你真的需要在多个vm中共享一个Project类的实例,那么在构造视图模型时使用工厂和某种类型的缓存。 如果您的vm需要更多信息,只需创建一个特殊的Model类,它将派生自Project(或实现IProject),因此您可以轻松使用接口隔离原则。
Singleton肯定会有所帮助。 要实现,如果我有一个名为User的类:
private static User mInstance; private User () //constructor { } public static User Instance { get { if (mInstance == null) mInstance = new User(); return mInstance; } }
在导航到新视图模型之前,您可以使用静态集合来填充视图模型。 然后,目标视图模型可以从其构造函数中检索数据。
例如,ViewModel1(VM1)将创建一个项目并填充它。 然后,VM1将项目放入碎片静态集合中。 然后,VM1将导航到另一个视图模型(VM2)。 在VM2的构造函数中,您将转到集合并检索VM1放置在那里的项目。
如果您使用键值对字典,它还允许您在视图模型之间共享其他数据。
上述就是C#学习教程:MVVM:在ViewModels之间共享数据分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942787.html