Android:ObservableCollection.insert(0,item)重新加载列表但是BindingList.insert(0,item)没有

时间:2014-02-14 06:10:17

标签: mvvmcross

如果我将项目添加到ItemsSource以及项目中的某些数据更改,我需要刷新MvxListView。 ItemsSource反向排序,所以当我添加一个项目时我正在使用

private void OnItemAdded(object sender, ObjectEventArgs e)
{
  ItemDataList.Insert(0, new ItemData((Item)e.Object));
}

当我使用ObservableCollection并且列表位于顶部并且我在顶部插入一个项目时,列表刷新,顶部显示新项目,所有其他项目向下移动。

如果我使用BindingList,那么在滚动之前列表不会刷新。 RaiseListChangedEvents设置为true,所以我希望它会刷新。

我不能使用ObservableCollection,因为我还需要在数据更改时刷新项目 - 这适用于从MvxNotifyPropertyChanged派生的BindingList和ItemData。

我这样做是否正确。 MvxListView应该使用BindingList吗?

谢谢, 乔纳森

2 个答案:

答案 0 :(得分:0)

也许我会发疯...现在似乎工作我正在模拟器上重新测试它。

答案 1 :(得分:0)

INotifyCollectionChangedMvxAdapter与收藏品绑定的方式 - 请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/Views/MvxAdapter.cs#L136

同样在iOS中MvxTableViewSource - https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Mac/Views/MvxTableViewSource.cs#L56

因此,IBindingListhttp://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist(v=vs.110).aspx)默认支持 。但是,如果他们愿意,个别开发人员可以轻松添加此功能 - 只需将上面的MvxAdapter扩展为订阅任何传入ListChanged来源的IBindingList个事件。