gpt4 book ai didi

mvvm - ViewModel作为ViewModel的成员

转载 作者:行者123 更新时间:2023-12-03 10:52:20 28 4
gpt4 key购买 nike

我一直在使用MVVM Light Toolkit来帮助学习MVVM模式。但是,我无法解决控件方案中的用户控件问题。

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

因此,我们将一个用户控件中的选定项传递给其他两个用户控件,这些用户控件又作为NewUnitOfWork控件(或窗口)的Content交换。

如果每个控件都有自己的ViewModel,则需要将所选值从一个ViewModel传递到下一个ViewModel。

我已经使用全局变量(通过“服务”)在单个用户的情况下工作了。但是,与此同时存在并发问题,这不是一个好的解决方案。这是低于标准的。

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

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

干杯

最佳答案

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

如果您具有复杂的UI,则拥有具有多个子ViewModel的主ViewModel非常方便。主ViewModel可能负责处理顶级UI控件并协调子VM,而其他ViewModel负责与UI的子区域进行通信。

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

关于mvvm - ViewModel作为ViewModel的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483042/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com