我有一个非常简单的小应用程序,它使用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; }
}
我希望能够在数据网格中显示以下字段:
基本上,我希望有一个Datagrid,允许我的用户查看项目的最新笔记,并在需要时编辑它们。
我无法弄清楚如何构造我的代码(我正在使用Code First / POCO)以允许用户从Datagrid视图创建一个新的ProjectNote。我不知道我是否需要我的Project类的另一个属性来允许单个ProjectNote,或者如果我可以编写此代码(通过ViewModel)以在用户编辑包含Project数据的Datagrid时正确实例化新的ProjectNote
如何创建允许跨多个实体编辑/创建的数据网格?
答案 0 :(得分:2)
我建议创建一个ViewModel,也许是ProjectNoteViewModel,它包含Note和Project。然后,将ProjectNoteViewModel的集合/列表绑定到DataGrid
。
或者,您可以将Project导航属性添加到ProjectNote类,这样您就可以在ProjectNote的DataGridRow
中包含Project.Name和Project.Description。如果这种关系很少或没有业务逻辑/复杂性,那么这种方法可行,但如果您需要执行任何复杂性或业务规则,我建议使用ViewModel。
This article提供了一起使用DataGrid
和MVVM的良好步骤。基本上,如果你有DataGrid
DataBound到某种类型的列表,DataGrid
将自动为你创建一个对象的新实例,并在用户点击空行时将其插入到集合中网格的底部。