gpt4 book ai didi

c# - 在 View 模型之间传递/传递值的正确方法?

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:36 25 4
gpt4 key购买 nike

我知道有很多关于这个主题的问题,我知道如何去做,但我需要一些关于我的架构设计的帮助。我正在使用简单 MVVM 工具包。

架构

  • 我有一个 ShellVM,它是我的应用程序的主要 VM。它提供了我的主视图绑定(bind)到的导航和 Prop 。

  • 然后我有一个 ManageVM,它负责管理客户端、存储、导入、导出等所有工作。它还处理我所有管理 View 的导航。

  • 然后我有一个 ImportVM 来充实数据导入。

  • 我还有一个静态 PageValues 字典,用于存储页面以及切换 View 时应保留的特定属性和值。它还存储在某些 VM 中使用的任何“全局”属性。

我正在使用消息传递在 VM 之间传递数据。 PageValues 数据的验证和提示(使用对话框)在我的 ManageVM 中控制。我把它放在这里是因为我觉得我的 ManageVM 应该处理所有“管理”,比如设置客户端和商店。设置实际值是通过向处理此操作的 ShellVM 发送消息来完成的。

ShellVM 处理 PageValues 的 CRUD。因此换句话说,如果任何 VM 获取或设置全局/shell 范围的属性,它会通过向 ShellVM 发送消息来实现。 ShellVM 然后将消息/结果发送回请求它的任何 VM。

问题

这感觉很像意大利面。我有一个 ManageVM,它对实际上在 ShellVM 中进行增删改查的 PageValues 进行加载和验证。

我是否在正确的轨道上,或者是否有任何其他建议可以让我感觉更清晰一些?

感谢阅读。

编辑

我想要实现的是拥有一个容器,其中包含可以从多个虚拟机访问的值(即客户端和存储)。一个好处是在这个容器中也有每个页面/ View 的值。然后在显示 View 时,它将从容器中获取其值并填充 View 。

最佳答案

你说

if any VM gets or sets a global/shell-wide property, it does so by means of messaging to the ShellVM

为此,我建议采用基于接口(interface)的方法而不是消息传递。 ViewModels 传递消息是为了 View 模型进行通信,而不是为了设置全局状态。如果应用程序存在全局状态,则最好通过专用服务 IMO 进行处理。

public interface IApplicationService
{
//your applcation methods here
}

public class ApplicationService:IApplicationService
{
}

public class ManageVM
{
public ManageVM(IApplicationService){}
}

public class ShellVM
{
public ShellVM(IApplicationService){}
}

public class SomeOtherVM
{
public SomeOtherVM(IApplicationService){}
}

关于c# - 在 View 模型之间传递/传递值的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011670/

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