2013-08-23 11 views
5

私はXamarin.iOSを使用しており、単一のセルを更新する方法を理解することはできません。 WPF ListViewでは、バインディングを実行して、セルのプロパティをinotifypropertychangedにすることができ、バインディングを通じて自動的に発生します。 Xamarin.iOSに同等の機能がいくつかありますか? UITableViewセルを一掃して再追加するだけで、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

私は同意しません。自分のクラスにカプセル化されたセルのすべてのロジックを保持する素晴らしい自己完結型ソリューションだと思います。これにより、セルはテーブルではなく、自身を更新する役割を担います。再利用されるセルインスタンスの停止は何もありません。 –

関連する問題