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