private static void CollectionViewItemsSourceChanged(UICollectionView collectionView, AttachedMemberChangedEventArgs <IEnumerable> args) { if (collectionView.Source == null) { collectionView.Source = CollectionViewSourceBase.Factory(collectionView, DataContext.Empty); } var source = collectionView.Source as ItemsSourceCollectionViewSource; if (source != null) { source.ItemsSource = args.NewValue; } }
private static void RegisterCollectionViewMembers(IBindingMemberProvider memberProvider) { BindingServiceProvider.ResourceResolver.AddType(typeof(UICollectionViewScrollPosition)); BindingServiceProvider.ResourceResolver.AddType(typeof(UICollectionViewScrollDirection)); BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UICollectionView.UseAnimations] = BindingServiceProvider.TemplateMemberPriority + 1; BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UICollectionView.ScrollPosition] = BindingServiceProvider.TemplateMemberPriority + 1; //UICollectionView BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override <UICollectionView>()); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.UseAnimations)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.ScrollPosition)); memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UICollectionView.SelectedItemChangedEvent)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override <UICollectionView>(), CollectionViewItemsSourceChanged)); memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UICollectionView.SelectedItem, GetCollectionViewSelectedItem, SetCollectionViewSelectedItem, (info, view, arg3) => (IDisposable)view.SetBindingMemberValue(AttachedMembers.UICollectionView.SelectedItemChangedEvent, arg3))); var itemTemplateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.ItemTemplateSelector, (view, args) => args.NewValue?.Initialize(view)); memberProvider.Register(itemTemplateMember); memberProvider.Register(typeof(UICollectionView), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true); //UICollectionViewCell memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UICollectionViewCell.ClickEvent)); memberProvider.Register(AttachedBindingMember .CreateNotifiableMember(AttachedMembers.UICollectionViewCell.Selected, (info, cell) => { if (CollectionViewSourceBase.HasMask(cell, CollectionViewSourceBase.InitializingStateMask)) { return(null); } var cellBindable = cell as UICollectionViewCellBindable; if (cellBindable == null) { return(cell.Selected); } return(cellBindable.SelectedBind.GetValueOrDefault()); }, (info, cell, arg3) => { var cellBindable = cell as UICollectionViewCellBindable; if (cellBindable == null) { cell.Selected = arg3.GetValueOrDefault(); } else { cellBindable.SelectedBind = arg3; } return(true); })); memberProvider.Register(AttachedBindingMember .CreateNotifiableMember(AttachedMembers.UICollectionViewCell.Highlighted, (info, cell) => cell.Highlighted, (info, cell, arg3) => { cell.Highlighted = arg3; return(true); })); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldHighlight)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldDeselect)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldSelect)); }