2013-08-23 15 views
5

Ich benutze Xamarin.iOS und kann nicht herausfinden, wie man eine einzelne Zelle aktualisiert. In WPF-ListView kann ich einfach eine Bindung durchführen und die Eigenschaften der Zelle eine inotify-Eigenschaft ändern lassen, was automatisch durch die Bindung geschieht. Gibt es eine ähnliche Funktionalität in Xamarin.iOS? Es scheint sehr umständlich zu sein, UITableView-Zellen zu aktualisieren, ohne sie einfach zu löschen und wieder hinzuzufügen.Xamarin.iOS UITableView, wie erzwingen Sie eine Zelle zu aktualisieren?

Was ist der beste Weg, einzelne Zellen zu aktualisieren?

Antwort

16

Vorausgesetzt, dass Ihre UITableView in einem „Tableview“ Variable gespeichert:

NSIndexPath[] rowsToReload = new NSIndexPath[] { 
    NSIndexPath.FromRowSection(1, 0) // points to second row in the first section of the model 
}; 
tableView.ReloadRows(rowsToReload, UITableViewCellRowAnimation.None); 
3

Erstellen Sie eine Unterklasse von UICell und binden Sie dort an INotifyPropertyChanged.

Sie können eine öffentliche Eigenschaft für das Modellobjekt erstellen, das UICell anzeigt.

Aktualisieren Sie dann die Anzeige des Zelleigenschaften, wenn sich das Modell ändert, oder wenn eine Eigenschaft ändert ...

public class CarCell : UITableViewCell 
{ 
    private Car car; 

    public Car Car 
    { 
     get { return this.car; } 
     set 
     { 
      if (this.car == value) 
      { 
       return; 
      } 

      if (this.car != null) 
      { 
       this.car.PropertyChanged -= HandlePropertyChanged; 
      } 

      this.car = value; 
      this.car.PropertyChanged += HandlePropertyChanged; 
      SetupCell(); 
     } 
    } 

    private void HandlePropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     SetupCell(); 
    } 

    private void SetupCell() 
    { 
     this.TextLabel.Text = this.car.Title; 
    } 
} 

Sie werden dann brauchen Rückkehr Instanzen der benutzerdefinierten Zelle in Ihrem UITableViewDataSource zu erstellen.

+2

Dies ist eine sehr umständliche Lösung ist, nicht zu erwähnen, dass die Ansicht (Zelle), um die Daten hält es anzeigt. Es kompliziert die Dinge sehr, besonders in Anbetracht der Tatsache, dass die Zelleninstanz wiederverwendet werden sollte, um andere Daten anzuzeigen. –

+4

Ich stimme nicht zu; Ich denke, es ist eine nette und in sich geschlossene Lösung, die die gesamte Logik für die Zelle in ihrer eigenen Klasse gekapselt hält. Es ermöglicht der Zelle, für die Aktualisierung selbst verantwortlich zu sein, nicht für die Tabelle. Es gibt nichts, was die Wiederverwendung der Zelleninstanz stoppt. –

Verwandte Themen