【发布时间】:2019-10-15 00:21:43
【问题描述】:
如果我在后面的代码中设置绑定,Xamarin.Forms 4.0 集合视图 ItemsSource 绑定无法按预期工作。这些项目基于源集合的初始值显示,但是当源集合更新时,UI 不会更新。如果我在 xaml 中设置绑定,则同样有效。
后面的代码:
public MainPage()
{
this.InitializeComponent();
this.BindingContext = this.mainViewModel = new MainViewModel();
CollectionView courseCollectionView = new CollectionView
{
ItemSizingStrategy = ItemSizingStrategy.MeasureFirstItem,
ItemTemplate = new DataTemplate(typeof(ItemView))
};
courseCollectionView.SetBinding(CollectionView.ItemsSourceProperty,
new Binding() { Source = this.mainViewModel.CountryNames, Mode =
BindingMode.TwoWay });
courseCollectionView.ItemsLayout = new GridItemsLayout(4,
ItemsLayoutOrientation.Vertical);
this.CoursesStack.Children.Clear();
this.CoursesStack.Children.Add(courseCollectionView);
}
查看用于 ItemsSource 绑定的模型属性:
ObservableCollection<Country> countryNames;
public ObservableCollection<Country> CountryNames
{
get => this.countryNames;
set
{
this.countryNames = value;
RaisePropertyChanged("CountryNames");
}
}
预期:应根据绑定到 ItemsSource 属性的 ObsevableCollection(从集合中添加/删除项目)所做的更改更新视图。
实际:视图不会随着 ObservableCollection 的更改而更新。
【问题讨论】:
-
当您说“未更新更改”时,您的意思是从集合中添加/删除项目吗?或者您的意思是更改集合中各个项目的属性?
-
当我从集合中添加/删除项目时,UI 没有更新。
-
您不需要在后面的代码中绑定ItemsSource - 您可以直接分配它。但这可能不是根本问题。你也不应该需要一个 CollectionView 的双向绑定
-
是的,我可以在 xaml 中绑定它,但是,这里提到的集合视图上有一个打开的错误/任务github.com/xamarin/Xamarin.Forms/issues/5354。而且我需要在设备方向更改时更新 ItemsLayout。无论如何@ottermatic 解决方案对我有用。谢谢你:)
-
@Jason 更改项目属性时怎么样?
标签: xamarin xamarin.forms collectionview itemssource