代码之家  ›  专栏  ›  技术社区  ›  Shane

如何在wpf mvvm中使用一对多关系编排组合视图?

  •  -1
  • Shane  · 技术社区  · 6 年前

    我读到在mvvm中,vm应该对视图一无所知,视图不应该直接绑定到模型,而应该绑定到vm,vm从模型转发属性并根据需要操作模型。因此,我猜模型类不需要实现inotifyproperty更改,因为这是由视图模型处理的。

    当一切都有一个的时候,这一切都很好,但我不知道当有父母和孩子的关系时,该如何安排。假设我们有一个order对象,其属性(客户名称、地址等)显示在order视图上。因此,OrderView绑定到OrderViewModel,后者具有对Order(Model)对象的引用。每个order对象都有一个order item(model)对象列表,这些对象具有item、quantity total等属性。

    现在,orderview需要显示一个orderitems列表(比如在gridview中),并绑定到orderview中名为items的属性。该属性的类型是什么?如果它是列表视图,那么out视图直接绑定到model对象,这违反了我在开始时提到的原则,而且orderitem对象确实实现了inotifypropertychanged。orderitem应该用某种vm对象包装吗?如果是,我们应该称它为orderitemviewmodel?我不确定这是否合适,因为订单项视图的视图模型不是这样的,它只是为gridview绑定提供属性,而且这个名称与下面描述的orderitemviewmodel类冲突

    现在假设我们有一个OrderitemView,它是OrderView的子级用户控件。其角色是在OrderView上显示当前选定的订单项。我说的对吗?它的视图模型应该被称为OrderitemViewModel,它应该有一个对OrderViewModel设置的当前所选订单的引用,所以OrderViewModel知道Orderitem视图模型?

    1 回复  |  直到 6 年前
        1
  •  0
  •   mm8    6 年前

    因此,我猜模型类不需要实现inotifyproperty更改,因为这是由视图模型处理的。

    这取决于如何定义模型。模型通常是一种服务,您可以用它注入视图模型。或包含业务逻辑的服务器端域对象。

    在视图中绑定到的类型可能被视为“子”类型 看法 模型。例如,如果 OrderViewModel 类公开以下属性:

    public ObservableCollection<Order> Orders { get; }
    

    …视图绑定到 Order 类并使后者实现 INotifyPropertyChanged 以及任何其他与客户相关的stuf。在这种情况下 秩序 实际上是视图模型而不是实际模型。