Xamarin Listview绑定到正常类的ObservableCollection

时间:2016-12-10 07:33:16

标签: c# xamarin xamarin.forms

我已经提供了一个Book类,但没有实现INotifyPropertyChanged接口,我无法对其进行更改。我有一个Book的集合,我希望在Xamarin的ListView中显示。所以:

public class BookListViewModel : INotifyPropertyChanged
{
    public ObservableCollection<Book> Books { get; set; }

    private void TestAction()
    {
        Books[1].Name = "New Name";
        //Here I need to inform the list to refresh
    }
}

现在我将此Books绑定到我的ListView.ItemsSource。如何通知ListView刷新?我已经尝试将OnPropertyChanged("Books");放在评论但不是运气的地方。

1 个答案:

答案 0 :(得分:0)

当您尝试OnPropertyChanged("Books");时,这用于通知列表元素的计数已更改,而不是元素本身。

由于您无法在模型级别实现INotifyPropertyChanged,因此当您在案例中修改列表中的单元格时,诀窍是:

  1. 删除要修改的元素
  2. 致电OnPropertyChanged("Books");,以便刷新清单
  3. 使用新数据添加要修改的元素
  4. 调用OnPropertyChanged("Books");,以便更新单元格刷新列表。
  5. 正如您可能猜到的,这个解决方案可能会解决您的问题,但性能明智不好,因为您必须重新绘制两次视图列表。因此,如果课程 Book 经常变化,那么我会说你必须更改它以使其实现INotifyPropertyChanged

    或者您可能有一个 Book 类的中间副本,它将实现INotifyPropertyChanged并且具有 Book 的实例,您可以从riplica引用其属性类。 如果您有许多要处理的课程,可以使用自动映射来帮助您解决问题