gpt4 book ai didi

entity-framework - 带有 EF DbContext 延迟加载的 MVVM 主/详细 View - 多个 ViewModel,或全部在一个 VM 中

转载 作者:行者123 更新时间:2023-12-03 10:29:34 24 4
gpt4 key购买 nike

我看过一些代码示例,它们基本上为 Master 创建了一个 View-Model,并为 Details 创建了一个 View-Model。然后他们将 Master 连接到带有 DataGrid 的 View ,然后将 Master View-Model 的选定项绑定(bind)到 ObservableObject(of DetailViewModel) 类型的 SelectedItem 属性,然后将其发送到 Detail View-Model,即然后绑定(bind)到详细 View ...如推荐here .或类似 this

看完这篇... http://blogs.msdn.com/b/adonet/archive/2011/03/08/ef-feature-ctp5-code-first-model-with-master-detail-wpf-application.aspx

这个.. One Model Entity, Multiple Pages -> Multiple Views? Multiple ViewModels?

还有这个... Multiple ViewModels associated with a single view

我很困惑:) Prism 这样做的首选方式似乎是为主视图和细节设置一个单独的 ViewModel,但在我的原因中,我觉得这样做会做更多的工作。

在我看来,如果您使用 Entity Framework DbContext 并且正在使用 .Local 属性进行绑定(bind),那么将一个 View 模型用于主/细节情况会更有意义。

最佳答案

直接绑定(bind)到 DbContext 或其任何属性将是一个坏主意,因为它会将模型暴露给 View ,这违反了 MVVM 背后的想法。 (View 知道 ViewModel,ViewModel 知道 Model)。

在主从场景中,您有两个不同的 View 模型,每个 View 模型具有 2 个不同的 View ,因为它们各自具有不同的角色。

  • Master 的角色是提供选择列表和导航到其详细信息的方法。
  • 另一方面,Detail 的作用是呈现单个元素,可能带有改变值的方法。

  • 假设您有一个产品列表作为数据模型,每个产品都有一个 id、一个名称和一个价格:
    class Product {
    public int Id { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
    }

    此外,您还有某种包含产品列表的数据模型:
    class ProductRepository {
    private List<Product> products = new List<Product>();
    public List<Product> Products
    {
    get { return this.prodcuts; }
    }
    }

    那么您的 MasterViewModel 的作用是公开 Products ProductRepository 模型的列表并提供一种切换到详细 View 的方法:
    class ProductsViewModel {
    private ProductRepositry productsModel = new ProductRepository();
    private ObservableCollection<Product> products = new ObservableCollection<Product>(productsModel.Products);

    public ObservableCollection<Product> Products
    {
    get { return this.products; }
    }

    public ProductViewModel Detail { get... private set... } // setter includes PropertyChange

    public ICommand ViewDetail { get... }

    public void ViewDetail(Product detail)
    {
    this.Detail = new ProductViewModel(detail);
    }
    }
    ProductViewModel的唯一责任是提供 Product :
    class ProductViewModel {
    public string Name { get... set... } // Again a PropertyChange would be necessary for propert binding
    public int Price { get... set... } // dito
    }

    关于entity-framework - 带有 EF DbContext 延迟加载的 MVVM 主/详细 View - 多个 ViewModel,或全部在一个 VM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836005/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com