2010-05-04 94 views
0

im使用WPFToolkit數據網格控制和做在這樣的方式的結合過程中:比主
杭大數據量的數據綁定到WPF數據網格

<WpfToolkit:DataGrid x:Name="dgGeneral" SelectionMode="Single" 
           SelectionUnit="FullRow" 
           AutoGenerateColumns="False" 
           CanUserAddRows="False" 
           CanUserDeleteRows="False" 
           Grid.Row="1" ItemsSource="{Binding Path=Conversations}" > 


public List<CONVERSATION> Conversations 
     { 
      get { return conversations; } 
      set 
      { 
       if (conversations != value) 
       { 
        conversations = value; 
        NotifyPropertyChanged("Conversations"); 
       } 
      } 
     } 

public event PropertyChangedEventHandler PropertyChanged; 

public void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

public void GenerateData() 
     { 
      BackgroundWorker bw = new BackgroundWorker(); 

      bw.WorkerSupportsCancellation = bw.WorkerReportsProgress = true; 
      List<CONVERSATION> list = new List<CONVERSATION>(); 

      bw.DoWork += delegate { list = RefreshGeneralData(); }; 

      bw.RunWorkerCompleted += delegate 
             { 
              try 
              { 
               Conversations = list; 
              } 
              catch (Exception ex) 
              { 
               CustomException.ExceptionLogCustomMessage(ex); 
              } 

             }; 

      bw.RunWorkerAsync(); 
     } 


而窗口將窗口的DataCotext設置爲包含GenerateData()的類的實例後調用GenerateData()。

RefreshGeneralData()返回我想要的一些數據列表,並且它快速返回。
總的來說,有近2000條記錄和6列(我沒有發佈我在網格初始化過程中使用的代碼,因爲我不認爲它可能是原因),網格掛起將近10秒!
---
PS我發現這個項目,這是寫在類似的方式,但即使是50000綁定記錄沒有被掛UI做有!我究竟做錯了什麼?
更新我認爲這是因爲ScrollViewer,其中包含整個網格。但爲什麼?

+1

...你的問題是? – 2010-05-04 13:42:44

+0

問題是:我如何加快綁定? – 0x49D1 2010-05-04 13:46:27

+0

或者你可以給我的方向..關於如何正確地將數據綁定到datagrid。林新的WPF,並沒有預料到這樣的問題 – 0x49D1 2010-05-04 13:50:05

回答

1

除非您明確禁用它,否則DataGrid中的項目將被虛擬化,即只渲染當前顯示的項目。由於UI自動化,您可能會遇到問題(這已在.NET 4中修復)。請參閱http://wpf.codeplex.com/Thread/View.aspx?ThreadId=41964

如果您安裝了Wacom平板電腦或屏幕閱讀器,可能會發生這種情況。

+0

沒有..我使用.NET4客戶端配置文件,只是普通的PC。 – 0x49D1 2010-05-04 14:31:24

+0

嗯。也許你可以發佈更多的代碼?特別是DataGrid的完整XAML。在分配數據後會發生掛起('Conversations = list;'部分)。你確定你只分配一次,並且數據沒有改變嗎? – 2010-05-04 20:36:01

+0

我只分配一次,掛起在Conversations = list後立即發生; – 0x49D1 2010-05-05 04:56:05

2

昨天我遇到了類似的情況(這就是我發現這篇文章的原因),在經過很多努力之後,這是我學到的教訓。我希望它也能幫助別人。

問題是數據網格的容器網格的寬度屬性設置爲自動。我的數據網格只有大約500行,每行有5列,但在這種自動模式下,它永遠掛着。一旦我將其更改爲*或固定寬度。它馬上就到了。