我有一些控件,我正在使用ObservableCollection(OC)将一些信息绑定到它们。虽然,我确信我这样做完全错了,因为每当我需要“更新”时,我只是将新的OC重新绑定到我控制的DataContext
MyControl.DataContext = ObservableDocument.GetAllDocuments();
//GetAllDocuments returns a new OC with ObservableDocument
除了这样做的错误方法之外,问题是,当数据量变大时,性能开始下降非常困难。
所以我决定使集合静态并更新它。但是现在我遇到了一块巨大的摇滚乐。
如果我使用EntityFramework获取数据,更新ObservableCollection的正确方法是什么?如果我使用实体框架,我是否应该使用OC?
为我需要更新的每个类集合编写自定义Equals似乎是愚蠢的。
P.S。我与ObservableCollection一起使用的所有类都已实现了INotifyOnPropertyChange接口。
答案 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