首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为ViewModel成员的ViewModel

作为ViewModel成员的ViewModel
EN

Stack Overflow用户
提问于 2011-03-30 15:07:51
回答 3查看 3.4K关注 0票数 0

我一直在使用MVVM Light Toolkit来帮助学习MVVM模式。但是,我还没能解决控件场景中的用户控件的问题。

例如,在时间表应用程序中,假设我们有一个名为NewUnitOfWork的控件。第一次加载时,带有带有项目列表的ListBox的面板将作为NewUnitOfWork的内容加载。用户点击其中一个。一个新的面板被替换为包含该项目可能的任务的ListBox。选择一个任务并加载一个新面板,该面板将包含用于为所选项目的所选任务输入数据的控件。

因此,我们将一个用户控件中的选定项传递给另外两个用户控件,这两个用户控件依次作为NewUnitOfWork控件(或窗口)的内容进行交换。

如果每个控件都有自己的ViewModel,我们需要将选定的值从一个ViewModel传递到下一个,依此类推。

我使用全局变量让它在单用户情况下工作(通过“服务”)。然而,这也存在并发问题,这不是一个好的解决方案。这是不合格的。

我在这个论坛上多次看到作为另一个ViewModel的成员在ViewModel上的建议。虽然这解决了手头的问题,但我认为它违反了MVVM模式。ViewModel应该直接使用的另一个ViewModel不是与UI相关的功能。

所以。有没有人找到了一种符合MVVM的干净方法来做这类事情?

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-30 23:27:11

请始终记住,MVVM只是一种模式,它的设计目的是帮助您分离UI和逻辑。不要害怕“违反模式”,如果它有助于提高应用程序的可测试性或可维护性。

如果您有一个复杂的UI,那么拥有一个包含多个子ViewModel的主ViewModels是非常方便的。主ViewModel可能负责处理顶级UI控件和子VM的协调,而其他ViewModels负责与UI的子区域进行通信。

此外,如果您有一个包含多个嵌套UI层的非常复杂的UI,则可以实现一个基础设施,以自动将所有事件从主VM级联到子VM。当然,您可以尝试使用更高级的MVVM框架之一。例如,Catel实现了相当全面的模型来解决嵌套VM的这种情况。

票数 5
EN

Stack Overflow用户

发布于 2011-03-30 15:13:36

我不认为ViewModels引用其他ViewModels有什么问题(根据我使用TreeViews的经验)。看看任何关于TreeView和MVVM的文章。您将看到每个节点都是一个引用ViewModels子节点集合的ViewModel。在没有VM-VM引用的情况下尝试这样做将是一场噩梦。

乔希·史密斯http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

票数 2
EN

Stack Overflow用户

发布于 2011-04-01 13:01:29

我一直在使用以下设置:

具有作为嵌套属性的“集合”虚拟机和“详细”虚拟机的“主”虚拟机。

主VM绑定到一个用作主-详细表单的视图。这个主-详细视图由另外两个视图组成。

我发现这是一个非常整洁的设置,因为它允许我在主视图(模型)中放置搜索条件,并保持其他视图(模型)的干净。

我看不出这怎么会打破这种模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5483042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档