internal SelectionChangedEventArgs GetSelectionChangedEventArgs() { List <object> addedSelectedItems = new List <object>(); List <object> removedSelectedItems = new List <object>(); // Compare the old selected indexes with the current selection to determine which items // have been added and removed since the last time this method was called foreach (int newSlot in _selectedSlotsTable.GetIndexes()) { object newItem = OwningGrid.DataConnection.GetDataItem(OwningGrid.RowIndexFromSlot(newSlot)); if (_oldSelectedSlotsTable.Contains(newSlot)) { _oldSelectedSlotsTable.RemoveValue(newSlot); _oldSelectedItemsCache.Remove(newItem); } else { addedSelectedItems.Add(newItem); } } foreach (object oldItem in _oldSelectedItemsCache) { removedSelectedItems.Add(oldItem); } // The current selection becomes the old selection _oldSelectedSlotsTable = _selectedSlotsTable.Copy(); _oldSelectedItemsCache = new List <object>(_selectedItemsCache); return (new SelectionChangedEventArgs(DataGrid.SelectionChangedEvent, removedSelectedItems, addedSelectedItems) { Source = OwningGrid }); }
public DataGridSelectedItemsCollection(DataGrid owningGrid) { OwningGrid = owningGrid; _oldSelectedItemsCache = new List <object>(); _oldSelectedSlotsTable = new IndexToValueTable <bool>(); _selectedItemsCache = new List <object>(); _selectedSlotsTable = new IndexToValueTable <bool>(); }
/// <summary> /// Returns a copy of this IndexToValueTable /// </summary> /// <returns>copy of this IndexToValueTable</returns> public IndexToValueTable <T> Copy() { IndexToValueTable <T> copy = new IndexToValueTable <T>(); foreach (Range <T> range in this._list) { copy._list.Add(range.Copy()); } return(copy); }