7

因此,如果我将父 ViewModel 的引用存储在子 ViewModel 中,那会是犯罪吗?我会违反 MVVM 规则吗?我的子视图是一个带有上下文菜单的窗口。When the appropriate menu item is selected a new child view needs to be created. 父级仅负责创建子视图。所以保持对父视图模型的引用对我有很多好处。同时我不想打破模式规则。

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;
    }
}
4

3 回答 3

3

不。一般来说,如果您多次使用这种技术,尝试将其隐藏在抽象之后,实际上这就是著名的Caliburn.Micro [我喜欢它] 项目使用其IChild 接口所做的事情。

于 2013-03-14T23:11:01.273 回答
2

答案是否定的,但出于您的目的,如果父级所做的只是创建子视图模型,为什么还需要此参考。建立这种联系的目的是什么?

于 2013-03-14T21:42:45.940 回答
1

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

于 2018-03-02T01:28:40.737 回答