void UpdateStructure(IReadOnlyList <Item> newList) { var edits = ListEdit.GetListEdits(items, newList); items = newList; var columns = tableView.TableColumns(); NSIndexSet allColumnsSet = null; foreach (var e in edits) { switch (e.Type) { case ListEdit.EditType.Insert: using (var set = new NSIndexSet(e.Index)) tableView.InsertRows(set, NSTableViewAnimation.None); break; case ListEdit.EditType.Delete: using (var set = new NSIndexSet(e.Index)) tableView.RemoveRows(set, NSTableViewAnimation.None); break; case ListEdit.EditType.Reuse: if (owner.OnUpdateView != null && owner.OnCreateView != null) { for (int col = 0; col < columns.Length; ++col) { var existingView = tableView.GetView(col, e.Index, makeIfNecessary: false); if (existingView != null) { owner.OnUpdateView((Item)e.Item, columns[col], existingView, (Item)e.OldItem); } } } else { if (allColumnsSet == null) { allColumnsSet = NSIndexSet.FromArray(Enumerable.Range(0, columns.Length).ToArray()); } using (var set = new NSIndexSet(e.Index)) tableView.ReloadData(set, allColumnsSet); } break; } } allColumnsSet?.Dispose(); }