因此,如果我在子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;
}
}
答案 0 :(得分:3)
NO。一般来说,如果你多次使用这种技术,试着将它隐藏在抽象背后,事实上这就是着名的Caliburn.Micro [我喜欢它]项目用它的IChild interface。
答案 1 :(得分:2)
答案是否定的,但出于您的目的,如果父母所做的一切都是创建子视图模型,为什么还需要此引用。这种联系的目的是什么?
答案 2 :(得分:1)
虽然这种模式根本不是犯罪或代码嗅觉,但在许多情况下,它可能更好地以接口的实现者的形式传递对父级的引用,而不是它自己的班级。因此,在接口中只定义子进程中需要访问的属性或方法,但是子进程不能访问父类的其他公共方法或属性,如果误用,可能会导致错误。这可能涉及更多的代码,但类之间更松散的连接可能会带来好处。如果不出意外,它有助于使孩子和父母之间的联系更加自我记录,并且让阅读代码的人更容易理解。