【问题标题】:How do I run a method from a relative ViewModel and get its return value?如何从相对 ViewModel 运行方法并获取其返回值?
【发布时间】:2021-05-03 19:28:36
【问题描述】:

为了更好地展示我的问题,我绘制了一个图表,说明我的 ViewModel 层次结构到目前为止的样子:

ViewModel hierarchy

我想要实现的只是简单地从 ScriptEditorViewModel 调用一个方法并询问它,当前在 EditObjectViewModel 内编辑的对象是否已在脚本中指定. 稍后我还想向 ScriptEditorViewModel 发送一些信息,并让它为不存在的对象生成一个脚本。

ScriptEditorViewModelProjectManagementViewModel在我的程序中是2个独立的标签,基本上是同时操作的。

是否可以这样做,如果可以,这是一个好方法吗?

注意:我目前使用 ReactiveUI 作为我的 MVVM 框架,但也欢迎使用任何其他 MVVM 解决方案。

【问题讨论】:

    标签: c# wpf mvvm reactiveui avaloniaui


    【解决方案1】:

    使用 MVVM 模式时,您希望解耦组件。

    • 在 View 部分有 xaml 与 ViewModel 中存在的数据和命令绑定。
    • 在 ViewModel 中,您应该保留呈现的数据以及对这些数据执行某些操作的逻辑。耦合多个 ViewModel 并不是最明智的做法——保持它们的逻辑分离。如果你有一个命令方法,它处理的所有数据都应该存在于它的 ViewModel 中。对于更复杂的事情,您应该考虑与某种服务或数据库进行通信。
    • 因此出现了模型部分。在这里,您想要创建您想要存储的东西的模型,而不必出现在视图中。

    我不知道我是否很好地理解了您的问题,但是在您的解决方案中包含数据库或任何类型的“持久层”应该可以解决访问特定信息的问题。您可以为启动创建一些内存存储。

    【讨论】:

    • 我明白,但是当我需要多个 ViewModel 中的相同数据并动态更新时怎么办?在我的例子中,它是一个类,它是在程序(Project.cs)开始时创建的。在这种情况下,我应该采取不断保存和重新阅读的方法吗?
    • 嗯,是的,数据库既用于长期存储主要是被动数据,也用于变化很大的动态数据。内存数据库通常用于后者。
    • 从简单的东西开始,比如具有静态 Dictionary 和 CRUD 方法的类。从那里开始。您可以稍后用一些真实的数据库替换它。
    • 值得注意的是,响应式导航确实能够将参数发送到后续视图模型。特别是如果您使用六分仪。这将实现@redcrusaderjr 推荐的分离
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多