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>();
 }
Exemple #3
0
        /// <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);
        }