gpt4 book ai didi

c# - ObservableCollection.CollectionChanged 未被调用

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:18 27 4
gpt4 key购买 nike

好的,我进行了搜索,但没有找到任何解决方案,所以我开始了。我有一个 public ObservableCollection<Photo> Items { get; set;}不会更新 MonoDroid 中的 UI,在 Monotouch 上一切正常。

经过进一步审查:删除和添加都不会刷新集合。我必须旋转设备才能看到变化。 (仅限安卓)

我的 View 是这样绑定(bind)的:

this.BindingContext = _viewModel;

var activityIndicator = new BrandActivityIndicator{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Center
};

activityIndicator.SetBinding<PhotosViewModel>(BrandActivityIndicator.IsVisibleProperty, vm => vm.IsBusy);
activityIndicator.SetBinding<PhotosViewModel>(BrandActivityIndicator.IsRunningProperty, vm => vm.IsBusy);

this.Padding = new Thickness(10, 5, 10, 0);
this.HorizontalOptions = LayoutOptions.FillAndExpand;
this.VerticalOptions = LayoutOptions.FillAndExpand;

_gridView = new GridView
{
RowSpacing = 15,
ColumnSpacing = 15,
ItemWidth = 85,
ItemHeight = 85,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
ItemTemplate = new DataTemplate(typeof(ImagesViewCell))
};

_gridView.SetBinding<PhotosViewModel> (GridView.ItemsSourceProperty, vm => vm.Items);
_gridView.SetBinding<PhotosViewModel> (GridView.IsVisibleProperty, vm => vm.NotBusy);

var layout = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
activityIndicator,
_gridView
}
};

this.Content = layout;

GridView 只是一个 ContentView

public class GridView : ContentView
{
public GridView()
{
SelectionEnabled = true;

}

public static readonly BindableProperty ItemsSourceProperty =
BindableProperty.Create<GridView,IEnumerable>(p => p.ItemsSource, null);
}

viewModel 是标准的

public class PhotosViewModel : BaseViewModel, IBadge
{
private readonly TaskScheduler _scheduler = TaskScheduler.FromCurrentSynchronizationContext();

public ObservableCollection<Photo> Items { get; set;}
public PhotosViewModel()
{
Items = new ObservableCollection<Photo>();

}
}

我尝试附加 Items.CollectionChanged += notify它没有被调用。此刻我出主意了。

最佳答案

这是一个猜测,可能是 ContentView 的 Android 实现中存在错误。您正在尝试将 ObsevableCollection 绑定(bind)到声明为 IEnumerable 的绑定(bind)。这应该无关紧要,但可能存在一个错误,其中 android 实现检测到 IEnumerable 但没有测试其基础类型以查看它是否也是 INotifyCollectionChanged。尝试将其从 IEnumerable 更改为具体类型,看看是否可行。正如我所说,这是基于我在 WPF 世界中发现的类似问题的猜测。

关于c# - ObservableCollection.CollectionChanged 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com