2

我有一个使用 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 .

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

4

1 回答 1

2

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

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

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

于 2013-05-07T14:38:06.830 回答