Use soft DataContext synchronization for Reactive UI controls #14477
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does the pull request do?
Improves the behavior of ReactiveUI controls by synchronizing
DataContext
andViewModel
only when it makes sense.What is the current behavior?
Synchronization between
DataContext
andViewModel
is a bit aggressive. For example, settingViewModel = null
unsetsDataContext
, which becomes inherited and breaks compiled bindings. Also, at least on Windows Forms, WPF, and MAUI, these controls don't synchronize the properties at all.What is the updated/expected behavior with this PR?
DataContext
andViewModel
can be set independently: when one is unset, they are synchronized.EDIT:
DataContext
andViewModel
can be set independently: when one is updated and its old value is equal to the other, the other is updated as well.How was the solution implemented (if it's not obvious)?
If!IsSet(one)
thenSetCurrentValue(one, other)
.EDIT: If
Object.ReferenceEquals(oldOne, other)
thenSetCurrentValue(other, one)
.Checklist
Breaking changes
May break expected behavior.