EntityFramework更新ObservableCollection

时间:2014-04-09 21:34:42

标签: wpf entity-framework observablecollection

我有一些控件,我正在使用ObservableCollection(OC)将一些信息绑定到它们。虽然,我确信我这样做完全错了,因为每当我需要“更新”时,我只是将新的OC重新绑定到我控制的DataContext

MyControl.DataContext = ObservableDocument.GetAllDocuments(); 
//GetAllDocuments returns a new OC with ObservableDocument

除了这样做的错误方法之外,问题是,当数据量变大时,性能开始下降非常困难。

所以我决定使集合静态并更新它。但是现在我遇到了一块巨大的摇滚乐。

如果我使用EntityFramework获取数据,更新ObservableCollection的正确方法是什么?如果我使用实体框架,我是否应该使用OC?

为我需要更新的每个类集合编写自定义Equals似乎是愚蠢的。

P.S。我与ObservableCollection一起使用的所有类都已实现了INotifyOnPropertyChange接口。

1 个答案:

答案 0 :(得分:0)

您必须将一个collectionviewsource绑定到您的控件,然后使用您的数据集合更新页面加载时的集合视图。每次更新时,请刷新collectionviewsource。以下是一段代码,用于理解我在这里所说的内容。此代码用于填充DataGrid。相同的绑定模式可用于更新INotifyPropertyChanged进入的单个记录;希望它足够清楚。

XAML:

 <Page.Resources>
    <CollectionViewSource x:Key="TestMySource" ..... />
</Page.Resources>

 <Grid>
   <StackPanel >
     <DataGrid x:Name="MyGrid" ItemsSource="{Binding}" DataContext="{StaticResource TestMySource}">
         <!-- grid--->
     </DataGrid>
   </StackPanel>
  <Grid>

代码:

Dim mytestsource As System.Windows.Data.CollectionViewSource
Dim mylist As ObjectModel.ObservableCollection(Of SimpleClass)

 Private Sub pgWorkwithDocumentTypes_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    Me.mytestsource = CType(Me.Resources("TestMySource"), System.Windows.Data.CollectionViewSource)
    mylist = boTest.Get_List <!--your method to get data-->
    Me.mytestsource.Source = mylist       
End Sub