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

问题描述 投票:7回答:3

那么,如果我在子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;
    }
}
c# .net wpf mvvm
3个回答
3
投票

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


2
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.