Implement DataContext update notifications on the DataGrid
What does the pull request do?
This fixes #5661 by allowing the DataGrid to notify its cells that their DataContext is about to be changed. This allows controls who needs to have these notifications (such as any SelectingItemsControls) to get notified before the DataContext changes. This is needed if the DataContext of the DataGrid changes to null which can occur when switching to another Tab from a TabControl ancestor as it prevents a clear of the items which would cause a binding target on the SelectedIndex to be set to -1.
What is the current behavior?
If a DataGrid has a ComboBox in one of its cell and this DataGrid is inside a TabControl, it is possible to trigger an unwanted set to the SelectedIndex binding to -1 by switching to another tab. This happens because since this ComboBox never gets notified that its DataContext is about to change, it will not avoid clearing its items once the change actually happen since this DataContext becomes null in this context.
What is the updated/expected behavior with this PR?
To have the DataGrid inform its cells that their DataContext is about to change and to also be informed when the change has completed.
How was the solution implemented (if it's not obvious)?
I call the Notify event passing the cell's content for each cell. This is done because the cells aren't reachable from the DataGrid's logical tree.
Checklist
- [ ] Added unit tests (if possible)?
- [ ] Added XML documentation to any related classes?
- [ ] Consider submitting a PR to https://github.com/AvaloniaUI/Documentation with user documentation
Breaking changes
Obsoletions / Deprecations
Fixed issues
Fixes #5661
Not sure what the CI is doing: it was failing last time, I just rebased and it seems to work...somewhat?
You can test this PR using the following package version. 0.10.999-cibuild0022966-beta. (feed url: https://nuget.avaloniaui.net/repository/avalonia-all/index.json) [PRBUILDID]
@aldelaro5 integration tests for mac are failing currently, because mac device is offline. That's fine for this PR, can be ignored.
You can test this PR using the following package version. 0.10.999-cibuild0023158-beta. (feed url: https://nuget.avaloniaui.net/repository/avalonia-all/index.json) [PRBUILDID]