2016-02-25 62 views
0

我與數據網格,將裝載千餘項工作的Datagrid虛擬化不能正常工作,所以我支持虛擬化。當我試圖在後面的代碼中使用Datagrid.SelectAll()選擇全部時,選擇工作正常。但是,當我以編程方式更改隱藏項目的IsSelected屬性時,向下滾動時項目不會更新。 ()當IsSelected屬性設置編程

步驟,使用全選:

  1. 最初,所有的數據項都在代碼中使用全選()後面選擇。
  2. 我選擇1行。
  3. 所有其他項目將除了選擇的一個被選中。使用編程更新IsSelected屬性爲true

步驟:

  1. 最初,所有的數據項都受到編程更新各項目屬性IsSelected =真地選擇。
  2. 我選擇了1行。
  3. 可見項目被取消當前所選行除外。但是當我向下滾動時,隱藏的項目仍然被選中。

如何更新的隱藏物品的IsSelected屬性?

+0

這不是你的描述中的錯誤嗎? DataGrid.Select ** All()**只選擇一些特定的行嗎? – VDN

+0

對不起,我感到困惑。我更新了我的問題。希望您能夠幫助我。謝謝! – Dyva

+0

您是否嘗試在選擇特定的行之前取消選擇所有行?像'dataGridView.ClearSelection()';據我所知,用'row.IsSelected'你可以選擇任意數量的行。它不會取消選擇先前選擇的行:'for(int i = 0; i <10; i ++)rows [i] .isSelected = true'將選擇所有10行 – VDN

回答

0

我已經處理上選擇change.This隱藏的項目解決的問題是使用MVVM模式來實現。

 private void HandleContentSelection(SelectionChangedEventArgs e) 
     { 
      if (e == null) return; 

      var dataGrid = e.Source as DataGrid; 
      if (dataGrid == null) return; 

      #region Update Grid Selection 

      if (e.AddedItems != null) 
      { 
       foreach (var item in e.AddedItems.Cast<IContent>()) 
       { 
        if (!item.IsSelected) 
        { 
         item.IsSelected = true; 
        } 
       } 
      } 

      if (e.RemovedItems != null) 
      { 
       _contentsToBeUnselected.Clear(); 

       // Handle Multiple selection 
       // Set hidden items IsSelected property to false 
       if (dataGrid.SelectedItems.Count > 0 && (e.AddedItems == null || e.AddedItems.Count == 0) && e.RemovedItems.Count > 1) 
       { 
        foreach (var content in dataGrid.Items.Cast<IContent>()) 
        { 
         if (!dataGrid.SelectedItems.Contains(content)) 
         { 
          _contentsToBeUnselected.Add(content); 
         } 
        } 
       } 
       // Handle Unselect All 
       // Set hidden items IsSelected property to false 
       else if (dataGrid.SelectedItems.Count == 0 && (e.AddedItems == null || e.AddedItems.Count == 0)) 
       { 
        _contentsToBeUnselected.AddRange(dataGrid.Items.Cast<IContent>()); 
       } 
       else 
       { 
        _contentsToBeUnselected.AddRange(e.RemovedItems.Cast<IContent>()); 
       } 

       foreach (var item in _contentsToBeUnselected) 
       { 
        if (item.IsSelected) 
        { 
         // if bound data item still is selected, fix this 
         item.IsSelected = false; 
        } 
       } 
      } 

      e.Handled = true; 

      #endregion 

     } 
0

試試這個DataGrid.UnselectAllCells();