2013-08-23 6 views
5

Używam Xamarin.iOS i nie mogę dowiedzieć się, jak zaktualizować pojedynczą komórkę. W WPF ListView, mogę po prostu zrobić wiązanie i mieć właściwości komórki zrobić inotifypropertychanged i automatycznie dzieje się przez wiązanie. Czy istnieje odpowiednik funkcjonalności w Xamarin.iOS? Wydaje się być bardzo kłopotliwe, aby zaktualizować komórki UITableView bez ich wymazywania i ponownego dodawania.Xamarin.iOS UITableView, w jaki sposób wymuszasz aktualizację komórki?

Jaki jest najlepszy sposób na aktualizację pojedynczych komórek?

Odpowiedz

16

Zakładając UITableView jest przechowywany w zmiennej „Tableview”:

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

Utwórz podklasę UICell i połącz tam z INotifyPropertyChanged.

Można utworzyć właściwość publiczną dla obiektu modelu wyświetlanego przez UICell.

Następnie zaktualizować właściwości ekranu komórki kiedy model zmiany lub gdy nieruchomość zmienia ...

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

Będziesz wtedy trzeba tworzyć instancje powrotów niestandardowego komórki w UITableViewDataSource.

+2

Jest to bardzo kłopotliwe rozwiązanie, nie wspominając, że widok (komórka) trzyma dane wyświetla. Bardzo to komplikuje, szczególnie biorąc pod uwagę fakt, że instancja komórki powinna być ponownie wykorzystana do wyświetlania innych danych. –

+4

Nie zgadzam się; Myślę, że to ładne i samodzielne rozwiązanie, które zachowuje całą logikę komórki zamkniętej w swojej klasie. Pozwala komórce być odpowiedzialnym za aktualizację, a nie za tabelę. Nic nie powstrzymuje ponownego użycia komórki. –

Powiązane problemy