实体框架& WPF Datagrid绑定

时间:2013-05-07 14:17:47

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

我有一个非常简单的小应用程序,它使用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. Project.Name
  2. Project.Description
  3. (最新)ProjectNote.Detail
  4. 基本上,我希望有一个Datagrid,允许我的用户查看项目的最新笔记,并在需要时编辑它们。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

This article提供了一起使用DataGrid和MVVM的良好步骤。基本上,如果你有DataGrid DataBound到某种类型的列表,DataGrid将自动为你创建一个对象的新实例,并在用户点击空行时将其插入到集合中网格的底部。