private void OnCellClicked(object sender, DataViewPair pair) { if (CellClicked == null) { return; } CellClicked(this, new OnCellClickedEventArgs(pair.Data, pair.IsSelected)); }
/// <summary> /// Use to update the data of the ListView, selected items will preserve their state. /// </summary> /// <param name="items">The new data set to be presented by the ListView.</param> public void UpdateData(List <T> items) { IEnumerable <T> onlyInOld = this.items.Except <T>(items); IEnumerable <T> onlyInNew = items.Except <T>(this.items); int dif = 0; foreach (var old in onlyInOld) { dif++; for (int i = 0; i < dataViewPairs.Count; i++) { if (dataViewPairs[i].Data == old) { DataViewPair p = dataViewPairs[i]; pairsPool.Add(p); dataViewPairs.RemoveAt(i); break; } } } //add new elements foreach (var item in onlyInNew) { dif--; bool exists = false; for (int i = 0; i < pairsPool.Count; i++) { if (pairsPool[i].Data == item) { exists = true; DataViewPair p = pairsPool[i]; dataViewPairs.Add(p); pairsPool.RemoveAt(i); break; } } if (!exists) { //does not exist create a new one dataViewPairs.Add(new DataViewPair(item, cellView.Clone(), comparer)); } } this.items.Clear(); this.items.AddRange(items); //Adjust position of scroll view yPosition -= dif * (cellView.GetDimensions.y + verticalCellPadding); yPosition = Mathf.Clamp(yPosition, 0, yPosition); dataViewPairs.Sort(); EditorWindow.focusedWindow.Repaint(); }