/// <summary>
        /// Reloads the view using the <see cref="CollectionViewLoader"/>
        /// </summary>
        protected void Load()
        {
            if (IsRefreshDeferred)
            {
                return;
            }

            _currentLoadToken = new object();
            CollectionViewLoader.Load(_currentLoadToken);
        }
        public DomainCollectionView(CollectionViewLoader collectionViewLoader, IEnumerable source)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            _collectionViewLoader = collectionViewLoader ?? throw new ArgumentNullException("collectionViewLoader");
            _collectionViewLoader.CanLoadChanged += OnCollectionViewLoaderCanLoadChanged;
            _collectionViewLoader.LoadCompleted  += OnLoadCompleted;

            CollectionView         = CreateView(source);
            EditableCollectionView = CollectionView as IEditableCollectionView;
            if (EditableCollectionView == null)
            {
                throw new InvalidOperationException(DomainServicesResources.MustImplementIecv);
            }

            PagedCollectionView = new DomainPagedCollectionView(LoadPage);

            SetPageIndex(PagedCollectionView.PageIndex);

            CalculateAll();
        }