Fix Uno/Avalonia WhenAnyValue going silent after first value; bump Uno.WinUI to 6.6.184 - #37
Merged
michaelstonis merged 5 commits intoAug 9, 2026
Conversation
Validated Stellar.Uno against a real Uno desktop (Skia) head on macOS: a scaffolded unoapp referencing Stellar.Uno ran the full Stellar lifecycle (SetupViewModel -> Initialize -> SetupUserInterface -> Bind -> Loaded -> Activated/IsAppearing) and a background-thread view model mutation was marshalled to the UI thread through UnoScheduler via RxSchedulers.MainThreadScheduler. 6.6.184 is the version paired with the current stable Uno.Sdk 6.6.42, so consumers on the template default get a single unified Uno.WinUI version. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…alue keeps emitting In a real Uno app using StellarUI.Uno, WhenAnyValue chains rooted at a view delivered their first synchronous value and then went silent, while plain INotifyPropertyChanged subscriptions kept working. Reproduced in a live Uno desktop head: observing a control's DependencyProperty (e.g. textBox.WhenAnyValue(t => t.Text)) produced exactly one emission. Cause: ReactiveUI resolves property observation through registered ICreatesObservableForProperty services. The WinUI/WPF .Reactive packages register a DependencyObject handler via WithWinUI()/WithWpf(), but Stellar.Uno's hand-rolled bootstrap (no ReactiveUI 24-compatible Uno package exists) registered only the activation fetcher and schedulers - so DependencyObject-rooted observation fell back to POCOObservableForProperty, which only ever produces the current value. Fix: Stellar.Uno now ships DependencyObjectObservableForProperty (built on RegisterPropertyChangedCallback) and registers it in UseStellarComponents. Verified in the live Uno desktop head: control observation now emits on every change (3/3), page-rooted chains keep flowing, and removing the registration reproduces the 1-emission failure. Stellar.Avalonia had the same latent gap since Avalonia.ReactiveUI was dropped - AvaloniaObject does not implement INotifyPropertyChanged, so control-rooted observation degraded the same way. It now ships an equivalent AvaloniaObjectObservableForProperty over the AvaloniaProperty PropertyChanged event. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR addresses a ReactiveUI 24 platform-integration gap where WhenAnyValue rooted at UI views on Uno and Avalonia could emit the initial value and then go silent due to missing ICreatesObservableForProperty implementations for platform property systems. It also updates Uno’s WinUI dependency to the version paired with the current Uno.Sdk to avoid version-mismatch build errors.
Changes:
- Register platform-specific
ICreatesObservableForPropertyimplementations for Uno (DependencyObject) and Avalonia (AvaloniaObject) so view-rootedWhenAnyValuechains continue emitting. - Add
DependencyObjectObservableForProperty(Uno) andAvaloniaObjectObservableForProperty(Avalonia) implementations. - Bump
Uno.WinUIfrom6.6.176to6.6.184.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| Stellar.Uno/Extensions/BuilderExtensions.cs | Registers the Uno dependency-property observable provider during ReactiveUI builder setup. |
| Stellar.Uno/DependencyObjectObservableForProperty.cs | Adds Uno DependencyProperty-based observation to keep WhenAnyValue emitting beyond the first value. |
| Stellar.Avalonia/Extensions/AppBuilderExtensions.cs | Registers the Avalonia property observable provider during ReactiveUI builder setup. |
| Stellar.Avalonia/AvaloniaObjectObservableForProperty.cs | Adds Avalonia AvaloniaProperty-based observation to keep WhenAnyValue emitting beyond the first value. |
| Directory.Packages.props | Updates Uno.WinUI package version to match Uno.Sdk expectations. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Follow-up to #36 (merged). Two commits that landed on the feature branch after the merge:
Fix:
WhenAnyValuerooted at a view delivered one value, then nothing (Uno + Avalonia)Reported from a real Uno app on StellarUI.Uno:
WhenAnyValuechains delivered their first synchronous value and then went silent, while plainINotifyPropertyChangedkept working.Cause. ReactiveUI resolves property observation through registered
ICreatesObservableForPropertyservices. The WPF/WinUI.Reactivepackages register aDependencyObjecthandler viaWithWpf()/WithWinUI(), but Stellar.Uno's hand-rolled bootstrap (no ReactiveUI 24-compatible Uno package exists) registered only the activation fetcher and schedulers. Observation of anyDependencyProperty-backed property — a control'sText, a page'sViewModel— fell back toPOCOObservableForProperty, which only ever produces the current value.Fix. Stellar.Uno now ships
DependencyObjectObservableForProperty(built onRegisterPropertyChangedCallback) and registers it inUseStellarComponents(). Stellar.Avalonia had the same latent gap since Avalonia.ReactiveUI was dropped (AvaloniaObjectdoesn't implement INPC) and gets an equivalentAvaloniaObjectObservableForProperty.Evidence (live Uno desktop head on macOS):
textBox.WhenAnyValue(t => t.Text)→ 1 emission (the reported symptom, reproduced)Bump Uno.WinUI 6.6.176 → 6.6.184
6.6.184 is the version paired with the current stable Uno.Sdk (6.6.42); the Sdk hard-errors (UNOB0004) when an app's Uno version disagrees, so tracking the paired version avoids friction for template-default consumers.
🤖 Generated with Claude Code