【发布时间】:2013-03-14 21:16:00
【问题描述】:
那么,如果我将父 ViewModel 的引用存储在子 ViewModel 中,那会是犯罪吗?我会违反 MVVM 规则吗?我的子视图是一个带有上下文菜单的窗口。选择适当的菜单项时,需要创建新的子视图。父级仅负责创建子视图。所以保持对父视图模型的引用对我有很多好处。同时我不想破坏模式规则。
class MainViewModel
{
List<ChildViewModel> _childrenViewModels = new List<ChildViewModel>();
public AddChild(ChildViewModel childViewModel)
{
_childrenViewModels.Add(childViewModel);
childViewModel.Owner = this;
}
}
class ChildViewModel
{
private Child _child;
public MainViewModel Owner { get; set; }
public ChildViewModel(Child child)
{
_child = child;
}
}
【问题讨论】:
-
这些模式只是帮助您入门的指南;不再。只有当你发现自己偏离了模式,你才应该四处看看,看看你是否选择了错误的模式。
-
模式并不是为了创建架构,而是为了解决架构中可能出现的问题。确保业务目标和完整性的最简单方法是正确的方法。
-
So if I store the parent ViewModel's reference in the child ViewModel will that be a crime- 绝对没有。谁告诉你的?任何 ViewModel 都可以引用任何其他 ViewModel(只要它不包含对 UI 元素的引用),这是完全可以的。 MVVM 的想法是将表现与行为分开,而不是创建很多限制来阻止您编写干净的代码。 -
HighCore 说得很好。
-
注意循环依赖——显然,如果你在进行构造函数注入和单元测试,你可能会发现 A 依赖于 B 而 B 依赖于 A,这可能是代码异味。我并不是说不要对父母保留参考,但应该有一个理由 - 这里的原因是什么?不能使用冒泡事件/动作或事件聚合器模式吗?