簡體   English   中英

將數據加載到datagrid需要太多時間

[英]Loading data to datagrid takes too much time

我的WPF應用程序中有一個DataGrid控件。 它綁定到Model對象的ObservableCollection。 每個Model對象都有一個構造函數,該構造函數將EF-Model對象用作參數。 應用程序用戶輸入正確的憑據后,有一種方法應執行。 此方法從數據庫(大約1000個EF-Model對象)異步加載數據。 加載后,我將每個對象傳遞給Model構造函數(類似於MyEFModelObjectsCollection.ForEach(o => MyObservableCollection.Add(new Model(o))) )。 但是將這千個對象加載到我的DataGrid中花費的時間太長。 我應該如何處理?

可能的原因是方法ObservableCollection.Add()每次都會生成事件CollectionChanged。 因此,這會影響您的應用程序的性能。 此外,ObserverCollection不包含方法AddRange()。 但是您可以添加自己的ObservableCollectionEx:ObservableCollection並實現AddRange(IEnumerable collection)方法。 您可以找到許多示例。

在這種情況下,要獲得更好的用戶體驗的一種好方法是為每行都有一個包裝器ViewModel。 創建1000個包裝並將網格綁定到這些新ViewModel的集合。 在您的DataGrid Columns XAML上,使用綁定中的FallBack值顯示一個臨時值。 然后,當您的異步數據服務返回您的Model對象時,將每個對象傳遞給包裝器ViewModel並使用新值更新ViewModel的屬性,以便網格始終響應並逐漸顯示正確的數據。

除非需要編輯,否則使用ListView / GridView
如果只需要基本編輯(文本框),請使用ListView

DataGrid可以做很多事情,但是會帶來很多開銷
單獨的數據模型非常復雜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM