【问题标题】:Entity Framework & WPF Datagrid binding实体框架和 WPF 数据网格绑定
【发布时间】:2013-05-07 14:17:46
【问题描述】:

我有一个使用 EF 和 WPF 的非常简单的小应用程序。我正在尝试为我们的小团队创建一个非常轻量级的“项目跟踪器”。这些类看起来像:

class Project
{
    public int ProjectId { get; set; }
    public string Name { get; set; }

    public List<ProjectNote> ProjectNotes { get; set; }

    public string Status { get; set; }
    public string Description { get; set; }

    public string ProjectLead { get; set; }
}

class ProjectNote
{


    public int ProjectNoteId { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateEdited { get; set; }
    public string CreatedBy { get; set; }
    public string LastEditedBy { get; set; }
    public string Detail { get; set; }
    public int ProjectId { get; set; }

}

我希望能够在数据网格中显示以下字段:

  1. 项目名称
  2. 项目描述
  3. (最近)ProjectNote.Detail

基本上,我想要一个 Datagrid,它允许我的用户查看项目的最新注释并在需要时对其进行编辑。

我无法弄清楚如何构造我的代码(我正在使用 Code First/POCO)以允许用户从 Datagrid 视图创建新的 ProjectNote。我不知道我是否需要我的 Project 类的另一个属性来允许单个 ProjectNote,或者当用户正在编辑包含项目数据的 Datagrid 时,我是否可以对此进行编码(通过 ViewModel)正确实例化一个新的 ProjectNote .

如何创建允许跨多个实体进行编辑/创建的数据网格?

【问题讨论】:

  • 您的视图模型上应该有一个ProjectNote 属性,称为NewNote,然后构建您的数据网格以包含该新属性所需的详细信息,以便用户可以输入它们。
  • 如果我这样做了,我怎样才能确保(或者我应该将代码放在哪里)我在该属性中获得了该项目的最新注释?

标签: c# wpf entity-framework mvvm entity-framework-5


【解决方案1】:

我建议创建一个 ViewModel,也许是 ProjectNoteViewModel,它包含 Note 以及项目。然后,将 ProjectNoteViewModels 的集合/列表绑定到 DataGrid

或者,您可以将项目导航属性添加到 ProjectNote 类,这将允许您在 ProjectNote 的DataGridRow 中包含 Project.Name 和 Project.Description。如果这种关系的业务逻辑/复杂性很少或没有,那么这种方法将起作用,但如果您需要强制执行任何复杂性或业务规则,我建议使用 ViewModel。

This article 提供了一起使用 DataGrid 和 MVVM 的好方法。基本上,如果您将DataGrid 绑定到某种列表,DataGrid 将自动为您创建对象的新实例,并在用户单击底部的空行时将其插入集合中网格。

【讨论】:

  • 令人惊讶的是,在搜索了三天并阅读了很多帖子后,我没有找到那个链接。谢谢你的建议!我现在应该可以让它工作了。
  • 我听到了,有时就像大海捞针!祝你好运。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 2014-04-19
  • 2016-07-06
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多