2013-08-23 28 views
5

Tôi đang sử dụng Xamarin.iOS và không thể tìm ra cách cập nhật một ô đơn lẻ. Trong ListView WPF, tôi chỉ có thể làm một ràng buộc và có các thuộc tính của tế bào làm một inotifypropertychanged và nó sẽ tự động xảy ra thông qua các ràng buộc. Có một số chức năng tương đương trong Xamarin.iOS không? Có vẻ như siêu cồng kềnh để cập nhật các ô UITableView mà không cần chỉ xóa chúng và thêm lại chúng.Xamarin.iOS UITableView, làm thế nào để bạn buộc một ô để cập nhật?

Cách tốt nhất để cập nhật các ô riêng lẻ là gì?

Trả lời

16

Giả sử UITableView của bạn được lưu trữ trong một "tableView" biến:

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

Tạo lớp con của UICell và liên kết với INotifyPropertyChanged tại đó.

Bạn có thể tạo thuộc tính công khai cho đối tượng mô hình mà UICell hiển thị.

Sau đó cập nhật thuộc tính hiển thị của tế bào khi thay đổi mô hình, hoặc khi một tài sản thay đổi ...

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

Sau đó bạn sẽ cần phải tạo ra các trường hợp trở lại của tế bào tùy chỉnh của bạn trong UITableViewDataSource của bạn.

+2

Đây là một giải pháp rất rườm rà, chưa kể đến đó xem (cell) đang nắm giữ các dữ liệu nó sẽ hiển thị. Nó làm phức tạp mọi thứ rất nhiều, đặc biệt là xem xét thực tế rằng các tế bào dụ nên được tái sử dụng để hiển thị dữ liệu khác. –

+4

Tôi không đồng ý; Tôi nghĩ rằng đó là một giải pháp tốt đẹp và độc lập giữ cho tất cả các logic cho các tế bào đóng gói trong lớp riêng của mình. Nó cho phép các tế bào có trách nhiệm cập nhật chính nó, không phải là bảng. Không có gì ngăn chặn các tế bào được tái sử dụng. –

Các vấn đề liên quan