Warum wird der Abonnent von WhenAnyValue nach dem erneuten Abschluss nicht auf Eigenschaftenänderungen ausgelöst?
Posted: 14 Jul 2025, 17:06
Ich habe eine MAUI -Anwendung mit reactiveUi.maui und reactiveUi.sourceGenerators Pakete. geladen/entladen wird, die die Ansicht enthalten. Das Abmessung ist daher wichtig. Entladen und dann erneut ladener Ansicht - Abonnieren funktioniert nicht mehr.
Warum werden bei reaktivem Ansatz die Eigenschaftsänderungen nach dem Entladen der Ansicht und dem Laden nicht mehr erkannt? Ereignisse funktionieren wie Uhren (überprüft mit Haltepunkten). Der Abonnent wird einmal ausgelöst, wenn init wie erwartet bezeichnet wird.>
Code: Select all
public partial class VM: ReactiveObject
{
[Reactive]
public partial string? Property { get; set; }
}
< /code>
Die Ansicht sollte auf Eigenschaftenänderungen überwachen und etwas ausführen. Schwärmerlicher Teil ist, dass die Ansicht beim Navigieren zu/von bestimmten FlyoutItem
Code: Select all
VM? vm;
public View()
{
Loaded += (s, e) =>
{
vm = BindingContext as VM;
vm?.PropertyChanged += VM_PropertyChanged;
};
Unloaded += (s, e) =>
{
vm?.PropertyChanged -= VM_PropertyChanged;
};
}
void VM_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
... // breakpoint here is always hit
}
< /code>
Hier ist kein Arbeitscode, der Abonnent erkennt keine Änderungen der Eigenschaften nach dem Entladen und Laden der Ansicht: < /p>
readonly CompositeDisposable disposables = [];
public View()
{
Loaded += (s, e) => Init();
Unloaded += (s, e) => disposables.Dispose();
}
void Init()
{
if (BindingContext is not VM vm)
return;
vm.WhenAnyValue(o => o.Property)
.Subscribe(property =>
{
// problem: not triggered on property changes after re-loading view
})
.DisposeWith(disposables);
}
Code: Select all
Unload