2010-05-06 87 views
0

我正在通過派生傳統的基於抽象的WPF DataGrid創建自定義DataGrid。我希望網格中的一個功能異步加載項目,其中一旦ItemsSource被更改,即一個新的集合被設置爲ItemsSource屬性或綁定的集合被更改爲rae添加,移動或刪除的項目的費用(其中當基礎源實現INotifyCollectionChanged(如ObservableCollection)時,通知將進入數據網格。ItemsControl逐個加載項目異步

這是因爲即使虛擬化數據網格下方的堆棧面板需要花費時間(2-3秒延遲)來加載數據行時,它有幾列,有些是基於模板的。通過上述行爲,延遲會「出現」減少給予datagrid一種感覺,它具有數據並且足夠響應以加載它。

我該如何實現它?

Thx Vinit。

回答

0

聽起來像你正在尋找data virtualization',這通常意味着創建自己的類似於IList的自定義類型,並做了大量工作來事後水合物體。

你最終將具有網格顯示這個樣子的東西你的數據:

Index 0: new MyDataObject(0); 
Index 1: new MyDataObject(1); 

而且MyDataObject實現INotifyPropertyChanged。

在構造函數中,您需要對讀取真實結果時所需的邏輯進行計時,調度或解釋。在此之前,您會返回空的數據... null和string.Empty從屬性中返回。然後,一旦數據變得可用(理想情況下在後臺線程中,從任何地方讀取 - 您自己的本地數據,或數據庫或Web服務),然後您可以更新實際的基礎屬性值並激發屬性更改通知這樣UI才能正確加載。

這太複雜了,只是跳到,所以一些搜索將有所幫助。希望這會讓你開始。