无法使用集合绑定的数据网格将新记录添加到数据库

时间:2019-06-06 02:23:07

标签: c# wpf wpfdatagrid

我有一个WPF DataGrid,它绑定到通过实体框架查询填充的ObservableCollection。我可以对DataGrid的内容进行编辑,但是由于某些原因,我无法添加新记录。我可以将数据添加到新行中,但是当我单击“保存”时,新记录就永远不会保存到数据库中。

这是我的收藏的声明方式

public ObservableCollection<Camp> Camps { get; private set; }

填充

Camps = new ObservableCollection<Camp>( await ctx.Camps.Include( "Applications.Applicant" ).OrderByDescending( c => c.StartDate.Year ).ToListAsync() );

并绑定到数据网格

<DataGrid MinHeight="300" ItemsSource="{Binding Camps}" SelectedItem="{Binding SelectedCamp}" AutoGenerateColumns="False"
                      CanUserResizeRows="True" CanUserResizeColumns="True" CanUserSortColumns="True" CanUserReorderColumns="True" CanUserAddRows="True">

这是将记录添加到数据库的保存方法

private async void SaveEntry()
{
    // Okay something is going on so that new records don't get added if they are created through the DG.
    var test = ctx.ChangeTracker.HasChanges(); // Just for testing

    if ( ctx.ChangeTracker.HasChanges() )
    {
        // Save changes
        await ctx.SaveChangesAsync();
    }
}

当我查看“ test”变量时,当我添加记录时,ChangeTracker从不显示true。如果我修改网格中的现有记录,则可以正常工作。将记录添加到数据网格时,是否未将记录添加到ObservableCollection中?如何从datagrid添加记录?

1 个答案:

答案 0 :(得分:1)

ObservableCollection<Camp>与上下文之间没有内置的同步,因此,当将新的Camp对象添加到ObservableCollection<Camp>时,应将其添加到上下文中。您可以通过处理ObservableCollection的{​​{1}}事件来做到这一点:

CollectionChanged