C# 在空数据网格中添加行

C# 在空数据网格中添加行,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我正在构建一个MVVM-WPF应用程序。 我有几个CRUD操作可以正常工作的数据网格 现在,我希望dataGrid在开始时总是空的,当然我可以在其中添加行。因此,我可以填充它,但当我单击“保存”时,不会保存任何内容 为什么? 视图模型: 视图: 您可以使用此方法将集合实际绑定到实体集的缓存本地。如果没有绑定,则更难保存添加的项目: private void Get() { ctx.Invoices.ToList().ForEach(invoice => ctx.Invoic

我正在构建一个MVVM-WPF应用程序。 我有几个CRUD操作可以正常工作的数据网格

现在,我希望dataGrid在开始时总是空的,当然我可以在其中添加行。因此,我可以填充它,但当我单击“保存”时,不会保存任何内容

为什么?

视图模型: 视图:
您可以使用此方法将集合实际绑定到实体集的缓存本地。如果没有绑定,则更难保存添加的项目:

private void Get() {
        ctx.Invoices.ToList().ForEach(invoice => ctx.Invoices.Local.Add(invoice));;
        Collection = ctx.Invoices.Local;
}
事实上,加载所有发票并将其缓存到本地可以是这样的:

private void Get() {
   ctx.Invoices.Load();
   Collection = ctx.Invoices.Local;
}
但是,正如您所说,您首先需要一个空的数据网格用于添加,然后可以重构Get方法以接受bool,指示是否应首先从db加载数据:

private void Get(bool loadDataFirst) {
   if(loadDataFirst) ctx.Invoices.Load();
   Collection = ctx.Invoices.Local;
}
现在,通过使用Get方法而不首先加载数据,您的集合仍然可以很好地绑定到应该为空的本地缓存。将新项目添加到集合后,本地将自动添加这些项目,保存操作只需调用SaveChanges:

应该在构造函数内部使用Get方法替换此方法。Collection=newobservedcollection;像这样:

public InvoiceViewModel() {
   Get(false);
}

你有收集物品吗?有。那你到底从哪里得到这个问题?事实上,我不想得到这些东西。我想要一个空的数据网格,在那里我可以添加新行,这些新行将保存在数据库中。但是没有保存任何内容。我相信它永远不会进入if条件ctx.Entryitem.State==System.Data.Entity.EntityState.Added,是吗?我没有看到对该方法的调用!我遗漏了什么吗?@Nikita你指的是哪种方法?获取你所说的方法。@Nikita你可以仔细浏览OP的代码,它是一个私有方法,就在Save方法的上方。以前OP将所有数据加载到网格中时可能会用到它,但他现在想要一个空列表,所以他没有使用Get。不是声明,我指的是调用Get函数。不管怎样,问题解决了!!:
private void Get(bool loadDataFirst) {
   if(loadDataFirst) ctx.Invoices.Load();
   Collection = ctx.Invoices.Local;
}
private void Save() {
   ctx.SaveChanges();
}
public InvoiceViewModel() {
   Get(false);
}