2013-08-23 2 views
5

Я использую Xamarin.iOS и не могу понять, как обновить одну ячейку. В WPF ListView я могу просто выполнить привязку, и свойства ячейки выполняют inotifypropertychanged, и это происходит автоматически через привязку. Есть ли эквивалентная функциональность в Xamarin.iOS? Кажется очень громоздким обновить ячейки UITableView, не просто вытирая их и повторно добавляя их.Xamarin.iOS UITableView, как вы вынуждаете ячейку обновлять?

Каков наилучший способ обновления отдельных ячеек?

ответ

16

Предполагая, что ваш UITableView хранится в переменной «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

Создайте подкласс UICell и привяжите его к INotifyPropertyChanged.

Вы можете создать общедоступное свойство для объекта модели, отображаемого UICell.

Затем обновите свойство отображения ячейки при изменении модели, или когда изменяется свойство ...

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

Затем вам нужно создать обратные случаи пользовательской ячейки в вашем UITableViewDataSource.

+2

Это очень неуклюжее решение, не говоря уже о том, что вид (ячейка) держит данные, которые он отображает. Это усложняет ситуацию, особенно учитывая тот факт, что экземпляр ячейки следует повторно использовать для отображения других данных. –

+4

Я не согласен; Я думаю, что это приятное и самодостаточное решение, которое поддерживает всю логику для ячейки, инкапсулированной в свой класс. Это позволяет ячейке нести ответственность за обновление, а не за таблицу. Нет ничего, что останавливало бы повторение использования экземпляра ячейки. –

Смежные вопросы