2016-06-09 19 views
0

Ich habe eine Listview und was ich tun möchte ist, wenn ich auf ein Element klicke, wird eine neue Seite mit den Details gestartet. Auf dieser Seite wird eine Schaltfläche zum Löschen, und wenn ich es drücke, wird das Element aus der Datenbank gelöscht und die Seite ist popasync, um zur Liste zurückzukehren.Xamarin Forms Update Listenansicht nach dem Löschen

Dann muss ich meine Listview aktualisieren, derzeit habe ich es dank eines Messaging-Center funktioniert, aber ich weiß nicht, ob es die beste Lösung ist. Diese

ist, wie ich meine Detailseite anzeigen zu starten:

cardList.ItemTapped += async (sender, e) => 
{ 
    await Navigation.PushAsync(new CardDetails((Card) e.Item, database));  
}; 

Dies ist meine Detailseite mit dem Löschcode:

var toolbarItem = new ToolbarItem 
{ 
    Name = "Supprimer", 
    Command = new Command(this.deleteAndReturn),    
}; 

private void deleteAndReturn() 
{ 
    database.deleteCard(card); 
    Navigation.PopAsync(); 
    MessagingCenter.Send<CardDetails>(this, "Delete"); 
} 

Auf meinem listPage ich die Ansicht wie aktualisieren:

MessagingCenter.Subscribe<CardDetails>(this, "Delete", (sender) => { 
    cardList.ItemsSource = database.getCards(); 
}); 

Ist es ein guter Weg, das zu tun? Ich bin schon so, dass wir Events wie "Popped" hören können, aber ich weiß nicht, wie ich darauf hören soll. Ich denke, das Äquivalent in Android wäre "OnActivityResult".

Antwort

0

es nicht aktualisieren, nachdem bearbeiten oder Listeneintrag löschen, so, nach Delete-Ereignis-Karte aus der Datenbank erhalten und setzen auf Listenansicht dann wieder beendet sollte wie:

cardList.ItemsSource = database.getCards() ;

+0

Ich mache das bereits und es ist erfrischend, meine Frage war über die beste Möglichkeit, eine bestimmte Aktion auf einer Seite nach einem Popasync durchzuführen – Spierki

3

Anstatt also die ItemSource neu zu setzen oder ein benutzerdefiniertes Rendering zu erstellen, können Sie eine ObservableCollection für dieses Verhalten verwenden.

Machen Sie einfach die IEnumarbale, die die ItemSource Ihrer ListView eine ObservableCollection ist. Alle Änderungen an dieser Liste werden direkt an die ListView selbst weitergegeben.