picoe / Eto

Cross platform GUI framework for desktop and mobile applications in .NET
Other
3.69k stars 334 forks source link

Mac: Fix issue updating items in a GridView #2699

Closed cwensley closed 2 weeks ago

cwensley commented 2 weeks ago

When certain collection updates happen, such as replacing an item or a range of items happen, then the visual state of the GridView could get out of whack as it could be reloading using the wrong item.

This happens because on Mac one must call NSTableView.BeginUpdates() before all updates are registered, then NSTableView.EndUpdates() after. Since the collection isn't actually changed when it called RemoveItem, then InsertItem, it could refresh the view using invalid state of the collection.

Now there are new virtual methods in CollectionChangedHandler for BeginUpdates() and EndUpdates() which can be forwarded to handlers in the case that the collection changed event causes multiple methods to be called.

Additionally, there are also ReplaceItem and ReplaceRange overrides in the case that replacing a single item can just refresh that row making it more efficient, and in the case of Mac will no longer make the refreshed item "slide down".