我一直在使用MVVM Light Toolkit来帮助学习MVVM模式。但是,我无法解决控件场景中的用户控件问题。ViewModel作为ViewModel的成员
例如,在Timesheet应用程序中,可以说我们有一个名为NewUnitOfWork的控件。第一次加载时,将带有列表框的包含项目列表的面板作为NewUnitOfWork的内容加载。用户点击一个。一个新面板与包含该项目可能任务的ListBox交换。选择一个任务并加载一个新的面板,其中将包含用于为所选项目的所选任务输入数据的控件。
因此,我们将一个用户控件中的选定项目传递给另外两个用户控件,而这两个用户控件依次交换为NewUnitOfWork控件(或窗口)的内容。
如果每个控件都有自己的视图模型,我们需要选择的值传递从一个视图模型到下等
我已完成了在使用全局变量单个用户工作的情况(通过“服务” )。但是,这存在并发问题,并不是一个好的解决方案。这是低于标准的。
我已经看到很多次这个论坛上的建议有ViewModel作为另一个ViewModel的成员。虽然这解决了手头的问题,但我认为这违反了MVVM模式。另一个ViewModel不是ViewModel直接支持的与UI相关的功能。
所以。有没有人发现一个干净的MVVM遵守方式做这种事情?
干杯
嗨LunarFrog。我的理解是,Catel允许您在不将ViewModel作为ViewModel的成员的情况下执行此操作。我很好奇,看看MVVM Light是否可以做到这一点。 – onefootswill 2011-03-31 00:09:12
内部Catel仍然保持一系列ViewModel能够转发事件。我想你可以通过引入额外的实体来模拟它,比如Controller,来管理你的虚拟机。 – 2011-03-31 20:35:00
好酷。感谢您的建议。我观看了DNRTV的这一集,其中主持人是在“坏主意”阵营。他使用消息系统在ViewModels之间传递值。我正在考虑所有这些东西。我想我不会真正形成我自己的观点,直到我有机会与它一起开展一个大项目(从痛苦中吸取教训)。 – onefootswill 2011-04-01 00:52:50