无法使用 collection 绑定数据网格向数据库添加新记录
Unable to add new record to DB using collection bound datagrid
我有一个绑定到通过 Entity Framework 查询填充的 ObservableCollection 的 WPF DataGrid。我可以对 DataGrid 的内容进行编辑,但由于某种原因我无法添加新记录。我可以在新行中添加数据,但是当我单击“保存”时,新记录永远不会保存到数据库中。
这是我的 collection 的声明方式
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" var 时,ChangeTracker 在我添加记录时从未显示为 true。如果我修改网格中的现有记录,它可以正常工作。将记录添加到数据网格时是否未将其添加到 ObservableCollection?如何从数据网格添加记录?
ObservableCollection<Camp>
和上下文之间没有 built-in 同步,因此您应该在新的 Camp
对象添加到 ObservableCollection<Camp>
时将其添加到您的上下文中.您可以通过处理 ObservableCollection
的 CollectionChanged
事件来做到这一点:
Camps.CollectionChanged += (ss, ee) =>
{
switch(ee.Action)
{
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
Camp newObject = ee.NewItems[0] as Camp;
ctx.Camps.Add(newObject);
break;
}
};
我有一个绑定到通过 Entity Framework 查询填充的 ObservableCollection 的 WPF DataGrid。我可以对 DataGrid 的内容进行编辑,但由于某种原因我无法添加新记录。我可以在新行中添加数据,但是当我单击“保存”时,新记录永远不会保存到数据库中。
这是我的 collection 的声明方式
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" var 时,ChangeTracker 在我添加记录时从未显示为 true。如果我修改网格中的现有记录,它可以正常工作。将记录添加到数据网格时是否未将其添加到 ObservableCollection?如何从数据网格添加记录?
ObservableCollection<Camp>
和上下文之间没有 built-in 同步,因此您应该在新的 Camp
对象添加到 ObservableCollection<Camp>
时将其添加到您的上下文中.您可以通过处理 ObservableCollection
的 CollectionChanged
事件来做到这一点:
Camps.CollectionChanged += (ss, ee) =>
{
switch(ee.Action)
{
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
Camp newObject = ee.NewItems[0] as Camp;
ctx.Camps.Add(newObject);
break;
}
};