将数据加载到datagrid需要花费太多时间

时间:2016-03-05 08:00:42

标签: c# wpf entity-framework asynchronous datagrid

我的WPF应用程序中有一个DataGrid控件。它绑定到Model对象的ObservableCollection。每个Model对象都有一个构造函数,它将EF-Model对象作为参数应用。在app用户输入正确的凭据后,有一个应该执行的方法。此方法从DB(大约1000个EF-Model对象)异步加载数据。加载后,我将每个对象传递给模型构造函数(像MyEFModelObjectsCollection.ForEach(o => MyObservableCollection.Add(new Model(o)))一样)。但是将这千个对象加载到我的DataGrid中需要很长时间。我应该如何处理它?<​​/ p>

3 个答案:

答案 0 :(得分:1)

可能的原因是方法ObservableCollection.Add()每次都生成事件CollectionChanged。因此它会影响您的应用程序的性能。 此外,ObserverCollection不包含方法AddRange()。但是您可以添加自己的ObservableCollectionEx:ObservableCollection并实现AddRange(IEnumerable collection)方法。你可以找到很多如何做的例子。

答案 1 :(得分:1)

在这种情况下实现更好的用户体验的一个好方法是为每一行设置一个包装器ViewModel。创建1000个包装器并将网格绑定到这些新ViewModel的集合。在DataGrid列上,XAML使用绑定中的FallBack值来显示临时值。然后,当您的异步数据服务返回您的Model对象时,将每个对象传递给包装器ViewModel并使用新值更新ViewModel的属性,以便网格始终响应,并逐渐显示正确的数据。

答案 2 :(得分:1)

除非您需要编辑,否则请使用ListView / GridView 如果您只需要基本编辑(文本框)仍然使用ListView

DataGrid做了很多,但它带来了很多开销 仅数据模型就很复杂了