Warum wird der Abonnent von WhenAnyValue nach dem erneuten Abschluss nicht auf Eigenschaftenänderungen ausgelöst?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Warum wird der Abonnent von WhenAnyValue nach dem erneuten Abschluss nicht auf Eigenschaftenänderungen ausgelöst?

Post by Anonymous »

Ich habe eine MAUI -Anwendung mit reactiveUi.maui und reactiveUi.sourceGenerators Pakete.

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 
geladen/entladen wird, die die Ansicht enthalten. Das Abmessung ist daher wichtig. Entladen und dann erneut ladener Ansicht - Abonnieren funktioniert nicht mehr.

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);
}

Warum werden bei reaktivem Ansatz die Eigenschaftsänderungen nach dem Entladen der Ansicht und dem Laden nicht mehr erkannt?

Code: Select all

Unload
Ereignisse funktionieren wie Uhren (überprüft mit Haltepunkten). Der Abonnent wird einmal ausgelöst, wenn init wie erwartet bezeichnet wird.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post