我的场景如下:
我使用的是EF4和linq。我有一个绑定到ICollectionView的数据网格(因为我使用过滤),如下所示:
view = CollectionViewSource.GetDefaultView(lstOrdsRlsd);
if (lstOrdsRlsd.Count > 0)
{
dgRecords1.ItemsSource = view;
}
其中lstOrdsRlsd是一个可观测集合。
我的问题是:
当数据库中发生更改时(无论是添加新行还是更改一条记录的某些属性等),我都需要刷新数据网格。
我试过datagrid.Items.Refresh()
,但没用。在这种情况下,我可以使用INotifyPropertyChanged吗?有人能提供一些关于如何实现这一点的示例代码吗?
感谢
您可以尝试使用DbSet<>。当地财产。这是一个可观察的集合,包含您从数据库上下文中查询到的所有行。
public ObservableCollection<T> DbSet<T>.Local
因此,如果以后进行任何查询,并且返回更多行,则DbSet<>。本地集合将为您INotifyCollectionChanged。:)
因此,下一步是确保EF获取新行。你可以使用Daniel Hilgarth的任何答案来实现这一点。
数据库中的新行不会自动反映在应用程序中。您需要手动从数据库中请求新项目,并将它们添加到您的收藏中。