Ich versuche, ein Ansichtsmodell auf ViewDidLoad zu initialisieren. Ich muss einige Async-Methoden im ViewModel-Initialisierungscode aufrufen, daher habe ich den Async-Code aus dem Konstruktor in eine async factory method verschoben.Xamarin Async ViewDidAppear aufgerufen während ViewDidLoad
Ich habe die ViewDidLoad
und ViewWillAppear
als async void
in meiner UIViewController Unterklasse markiert, aber aus irgendeinem Grunde, während der Linie 4 ist die ViewWillAppear
ausgeführt wird gekickt und Linie 11 führt ein NullReferenceException
weil das Ansichtsmodell noch nicht initialisiert ist.
Mein Verdacht ist, dass Xamarin kann nicht warten, bis ViewDidLoad abgeschlossen ist, weil es async void
ist, aber ich muss eine async void
hier verwenden, weil es eine Methode überschreibt.
MyCustomUiViewController.cs
1 public override async void ViewDidLoad()
2 {
3 base.ViewDidLoad();
4 ViewModel = await ViewModel.CreateAsync();
5 OtherStuff();
6 }
7
8 public override async void ViewWillAppear(bool animated)
9 {
10 base.ViewWillAppear(animated);
11 ViewModel.SomeMethod(); // <-- NullReferenceException
12 AttachViewModelToViewBindings();
13 }
Ich bin offen, die Architektur zu ändern, wenn es ein besseres Muster für Instanziieren ein asynchrones Ansichtsmodelles ist.
Sie haben die Funktionen async markiert, aber das heißt nicht, dass sie jemals erwartet werden. Nicht sicher, ob das so ist, aber vielleicht? – bodangly
Ich bin auch mit dem gleichen Problem konfrontiert, haben Sie einen Workaround dafür gefunden? –
@ZeaShah Ich habe unten eine Antwort hinzugefügt, die helfen kann – Seafish