1

拜托,您对以下场景有什么建议(就架构质量而言)最好的方法:

ModelViewA(父) - 需要从 ModelViewB 收集来显示数据 - 即使集合保持不变,也可以多次访问集合

ModelViewB (child) - 保存项目的集合。该集合在概念上属于 ModelViewB,主要在此(模型)视图中进行修改。但是,ModelViewA 也可以修改集合

我目前采用的方法是在 ModelViewB 中收集并在 ModelViewA 中复制。使用消息总线(MMVM Light 工具包),我让 ModelViews 相互通知更改。但是,这感觉很尴尬,因为我保留了重复的集合并对其进行了同步。我宁愿只将它放在一个地方并从 ModelViewA 和 B 访问它。我在想也许将一个 ModelView 注入另一个,但这会增加耦合并且通常感觉 MVVM 模式是错误的。我也可以只使用对两个模型视图的静态引用,因为我有静态定位器(也来自 MVVM Light 工具包)保存引用。或者也许有更好的解决方案?

谢谢,

4

1 回答 1

0

我现在(有点)正在这样做。

我有一个 ConsoleViewModel,它记录和存储来自执行的事件,以便在我的 ConsoleView 的 UI 中显示。自然地,我的 ViewModels 希望与这个控制台通信以记录他们的事件。

为了做到这一点,我创建了一个接口,它公开了我的 ViewModel 可以用来将其事件写入控制台的方法。

public interface IConsole
{
  void Info(string message);
  void Info(string messageFormat, params object[] args)
  // etc
}

我的 ConsoleViewModel 实现了这个接口,所有其他 ViewModel 都公开了一个 IConsole 类型的公共属性,它们用来写入控制台。

在此过程中,您可以使用多种方法来合成您的 ViewModel。您可以使用 DI 或简单的服务定位器,或者(如我所做的)在资源中定义它们。

<Application.Resources>
    <ConsoleViewModel x:Key="ConsoleViewModel" />
    <DerpViewModel x:Key="Derp" 
        Console="{StaticResource ConsoleViewModel}" />
    <!--etc-->     
</Application.Resources>
于 2011-07-14T16:31:47.520 回答