我应该在子视图模型中存储对父视图模型的引用吗?

时间:2013-03-14 21:16:00

标签: c# .net wpf mvvm

因此,如果我在子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;
    }
}

3 个答案:

答案 0 :(得分:3)

NO。一般来说,如果你多次使用这种技术,试着将它隐藏在抽象背后,事实上这就是着名的Caliburn.Micro [我喜欢它]项目用它的IChild interface

答案 1 :(得分:2)

答案是否定的,但出于您的目的,如果父母所做的一切都是创建子视图模型,为什么还需要此引用。这种联系的目的是什么?

答案 2 :(得分:1)

虽然这种模式根本不是犯罪或代码嗅觉,但在许多情况下,它可能更好地以接口的实现者的形式传递对父级的引用,而不是它自己的班级。因此,在接口中只定义子进程中需要访问的属性或方法,但是子进程不能访问父类的其他公共方法或属性,如果误用,可能会导致错误。这可能涉及更多的代码,但类之间更松散的连接可能会带来好处。如果不出意外,它有助于使孩子和父母之间的联系更加自我记录,并且让阅读代码的人更容易理解。