by Anonymous » 14 Jul 2025, 17:06
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?
Ereignisse funktionieren wie Uhren (überprüft mit Haltepunkten). Der Abonnent wird einmal ausgelöst, wenn init wie erwartet bezeichnet wird.>
Ich habe eine MAUI -Anwendung mit reactiveUi.maui und reactiveUi.sourceGenerators Pakete.[code]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] geladen/entladen wird, die die Ansicht enthalten. Das Abmessung ist daher wichtig. Entladen und dann erneut ladener Ansicht - Abonnieren funktioniert nicht mehr.[code]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]
Warum werden bei reaktivem Ansatz die Eigenschaftsänderungen nach dem Entladen der Ansicht und dem Laden nicht mehr erkannt?[code]Unload[/code] Ereignisse funktionieren wie Uhren (überprüft mit Haltepunkten). Der Abonnent wird einmal ausgelöst, wenn init wie erwartet bezeichnet wird.>