我已经提供了一个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");
放在评论但不是运气的地方。
答案 0 :(得分:0)
当您尝试OnPropertyChanged("Books");
时,这用于通知列表元素的计数已更改,而不是元素本身。
由于您无法在模型级别实现INotifyPropertyChanged
,因此当您在案例中修改列表中的单元格时,诀窍是:
OnPropertyChanged("Books");
,以便刷新清单OnPropertyChanged("Books");
,以便更新单元格刷新列表。 正如您可能猜到的,这个解决方案可能会解决您的问题,但性能明智不好,因为您必须重新绘制两次视图列表。因此,如果课程 Book 经常变化,那么我会说你必须更改它以使其实现INotifyPropertyChanged
或者您可能有一个 Book 类的中间副本,它将实现INotifyPropertyChanged
并且具有 Book 的实例,您可以从riplica引用其属性类。
如果您有许多要处理的课程,可以使用自动映射来帮助您解决问题