protected CollectionViewSourceBase([NotNull] UICollectionView collectionView,
                                           string itemTemplate = AttachedMemberConstants.ItemTemplate)
        {
            Should.NotBeNull(collectionView, nameof(collectionView));
            _collectionView       = TouchToolkitExtensions.CreateWeakReference(collectionView);
            _itemTemplateProvider = new DataTemplateProvider <ICollectionCellTemplateSelector>(collectionView, itemTemplate);
            var controllerView = collectionView.FindParent <IViewControllerView>();

            if (controllerView != null && !(controllerView is IMvvmNavigationController))
            {
                _listener = ReflectionExtensions.CreateWeakEventHandler <CollectionViewSourceBase, EventArgs>(this, (adapter, o, arg3) => adapter.OnDisposeController(o, arg3));
                controllerView.Mediator.DisposeHandler += _listener.Handle;
            }

            UseAnimations = collectionView
                            .GetBindingMemberValue(AttachedMembers.UICollectionView.UseAnimations)
                            .GetValueOrDefault(true);
            ScrollPosition = collectionView
                             .GetBindingMemberValue(AttachedMembers.UICollectionView.ScrollPosition)
                             .GetValueOrDefault(UICollectionViewScrollPosition.Top);
        }