请问,您对以下场景的最佳(建筑质量方面)方法是什么:
ModelViewA(父级) - 需要从ModelViewB收集以显示数据 - 即使集合保持不变也会多次访问集合
ModelViewB(child) - 包含项目集合。该集合在概念上属于ModelViewB,主要在此(模型)视图中进行修改。但是,ModelViewA也可以修改集合
我采用的当前方法是在ModelViewB中进行收集,在ModelViewA中进行复制。使用消息传递总线(MMVM Light工具包)我让ModelViews相互通知更改。但是,由于我保留了重复的集合并使其同步,因此感觉很尴尬。我宁愿只在一个地方使用它,并从ModelViewA和B访问它。 我在考虑将一个ModelView注入另一个但是会增加耦合并且通常对MVVM模式感觉不对。我也可以使用对两个ModelView的静态引用,因为我有静态定位器(也来自MVVM Light工具包)保存引用。 或许还有更好的解决方案?
谢谢,
0
答案 0 :(得分: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>