我应该在子视图模型中存储对父视图模型的引用吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该在子视图模型中存储对父视图模型的引用吗?相关的知识,希望对你有一定的参考价值。
那么,如果我在子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;
}
}
答案
没有。一般来说,如果你多次使用这种技术试图将它隐藏在抽象背后,事实上这就是着名的Caliburn.Micro [我喜欢它]项目用它的IChild interface。
另一答案
答案是否定的,但为了您的目的,如果父母所做的一切都是创建子视图模型,为什么还需要这个引用。拥有这种联系的目的是什么?
另一答案
虽然这种模式根本不是犯罪或“代码味道”,但在许多情况下,它可能更好地以接口的实现者的形式传递对父级的引用,而不是作为它自己的类。因此,只有子进程中需要访问的属性或方法才能在接口中定义,但子进程不能访问父类的其他公共方法或属性,如果误用,可能会导致错误。这可能涉及更多的代码,但类之间更松散的连接可能会带来好处。如果不出意外,它有助于使孩子和父母之间的联系更加自我记录,并使阅读代码的人更容易理解。
以上是关于我应该在子视图模型中存储对父视图模型的引用吗?的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 Silverlight 项目中使用模型-视图-视图模型 (MVVM) 模式吗?