簡體   English   中英

Datagrid按需卸載

[英]Datagrid on demand load off

我有一個帶有20列左右的SDK:DATAGRID,當它打開時只顯示四個字段/列。 我想要什么以及如何設計

基本上,我是根據用戶點擊來獲取信息的-示例:

OWNERNAME.Text = ((TextBlock)EPICGrid.Columns[1].GetCellContent(EPICGrid.SelectedItem)).Text;

和/或

OWNERNAME2.Text = ((TextBlock)EPICGrid.Columns[16].GetCellContent(EPICGrid.SelectedItem)).Text;

除非滾動並顯示該列,否則我所遇到的問題不會獲取單元格中的信息,因此我只能獲取數據的前4列,因為它們顯示了何時顯示網格。

我無法從第5列至第-20列中獲取數據,除非我將這些列合在一起並使這些列可見。 在點擊過程中它們不必是可見的……似乎直到我查看該列才真正加載數據。

我想我應該說第一條記錄/行會加載所有數據/單元格/列,我可以從第一條記錄中獲取任何數據,但是問題出在記錄2-*上。

只是要澄清-我的問題不是我的列或行的可見性。 我的問題是SDK DataGrid似乎正在按需加載數據。 因此,如果在某一點或另一點看不到該列,則該單元格中的信息將不可用。

我不想顯示所有列,也不想賦予用戶查看所有列的能力,所以我想禁用滾動條,但是當用戶單擊某一行時,我需要在某些單元格中獲取信息並且由於該列尚未加載,因此信息不存在。

如何關閉按需加載功能?

我進行了搜索,發現有人在加載行時遇到了類似的問題,並且建議設置VirtualizingStackPanel.VirtualizationMode = Standard

幾乎就像問題出在VirtualizingStackPanel.VirtualizationMode上一樣,但我將此屬性設置為standard並進行了回收,沒有運氣。

定義如下:

默認情況下,VirtualizingStackPanel為每個可見項目創建一個項目容器,並在不再需要它時(例如,當項目滾動到視圖外時)將其丟棄。 當ItemsControl包含很多項目時,創建和丟棄項目容器的過程可能會對性能產生負面影響。 當VirtualizingStackPanel.VirtualizationMode設置為Recycling時,VirtualizingStackPanel會重用項目容器,而不是每次都創建一個新容器。

初始加載時,如果看不到該單元格,則無法獲取該單元格的內容(除非它是第一個記錄/行)。 在單元格/列可見之后,該信息可用。

我認為您應該直接處理該行綁定到的數據,而不要將數據從控件中拉出。 這是有道理的,因為它是兩種方式的數據綁定,所以在您更改數據時會更新數據(假設它實現了INotifyPropertyChanged接口)。

一個示例是將數據網格綁定到類型MyEntity的集合。

     private void DataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (this.DataGrid1.SelectedItem == null)
                return;

            MyEntity myEntity = (MyEntity)this.DataGrid1.SelectedItem;

            // at this point you have the (updated) data the row is bound to.
           MessageBox.Show("You Selected: " + myEntity.name);
           ...

另一個示例是每行上都有一個按鈕。 單擊按鈕時要處理的代碼如下所示:

      private void btnProcessEntity_Click(object sender, RoutedEventArgs e)
      {

         Button btn = sender as Button;
         MyEntity myEntity = btn.DataContext as MyEntity;

          // clicking a button in a row doesn't select the row, so select it.
         this.DataGrid1.SelectedItem = myEntity;  
         MessageBox.Show("Will Process: " + myEntity.name);

          ...
       }

如果您不熟悉Silverlight通常使用的某些技術,請查看這些視頻教程 它是VB.Net,但是代碼實際上並不是重點-它專注於Silverlight應用程序體系結構。 我將從“ SL4和WCF Ria服務簡介”開始,然后在MVVM上查看其中之一。

暫無
暫無

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

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