public CollectionViewModel()
        {
            BackCommandVisibility       = Visibility.Visible;
            CollectionCommandVisibility = Visibility.Collapsed;
            FirstPageCommand            = new RelayCommand(OnFirstPageCommand, FirstPageCommandEnabled);
            PreviousPageCommand         = new RelayCommand(OnPreviousPageCommand, PreviousCommandEnabled);
            NextPageCommand             = new RelayCommand(OnNextPageCommand, NextCommandEnabled);
            LastPageCommand             = new RelayCommand(OnLastPageCommand, LastPageCommandEnabled);
            ApplyFilterCommand          = new RelayCommand(OnApplyFilterCommand);
            ClearFilterCommand          = new RelayCommand(OnClearFilterCommand);

            _CollectionFilterParameters = new CollectionFilterParameters();

            SetupFilters();

            var bulkOrderDeeds = new List <BulkOrderDeedViewModel>();

            foreach (var bulkOrderDeed in BulkOrderDeedManager.Instance.GetFilteredCollection(_CollectionFilterParameters))
            {
                if (bulkOrderDeed is SmallCollectionBulkOrderDeed smallCollectionBulkOrderDeed)
                {
                    bulkOrderDeeds.Add(new SmallBulkOrderDeedViewModel(smallCollectionBulkOrderDeed));
                }
                else if (bulkOrderDeed is LargeCollectionBulkOrderDeed largeCollectionBulkOrderDeed)
                {
                    bulkOrderDeeds.Add(new LargeBulkOrderDeedViewModel(largeCollectionBulkOrderDeed));
                }
            }

            _AllBulkOrderDeeds = new List <BulkOrderDeedViewModel>();
            _BulkOrderDeeds    = new ObservableCollection <BulkOrderDeedViewModel>();
            RefreshIfNecessary();

            BulkOrderDeedManager.Instance.BulkOrderDeedCollectionItemsAdded   += BulkOrderDeedCollectionItemsAdded;
            BulkOrderDeedManager.Instance.BulkOrderDeedCollectionItemsRemoved += BulkOrderDeedCollectionItemsRemoved;
            BulkOrderDeedManager.Instance.VendorAdded              += VendorAdded;
            BulkOrderDeedManager.Instance.VendorRemoved            += VendorRemoved;
            BulkOrderDeedManager.Instance.BulkOrderDeedBookAdded   += BulkOrderDeedBookAdded;
            BulkOrderDeedManager.Instance.BulkOrderDeedBookRemoved += BulkOrderDeedBookRemoved;

            var importPlugins = new List <ImportPluginViewModel>();

            foreach (var importPlugin in BulkOrderDeedManager.Instance.ImportPlugins)
            {
                var importPluginViewModel = new ImportPluginViewModel(importPlugin);

                importPluginViewModel.ImportCompleted += ImportCompleted;
                importPlugins.Add(importPluginViewModel);
            }

            _ImportPlugins = new ObservableCollection <ImportPluginViewModel>(importPlugins);
        }
        private bool ApplyCollectionFilterImpl(CollectionFilterParameters parameters, CollectionBulkOrderDeed bulkOrderDeed)
        {
            var retVal = true;

            foreach (var parameter in parameters.GetAppliedFilters())
            {
                if (!parameter.ApplyFilter(bulkOrderDeed))
                {
                    retVal = false;
                    break;
                }
            }

            return(retVal);
        }
        public IEnumerable <CollectionBulkOrderDeed> GetFilteredCollection(CollectionFilterParameters parameters)
        {
            var parametersCopy = parameters.Clone();
            var retVal         = new List <CollectionBulkOrderDeed>();

            foreach (var bulkOrderDeed in _Collection)
            {
                if (!ApplyCollectionFilterImpl(parametersCopy, bulkOrderDeed))
                {
                    continue;
                }

                retVal.Add(bulkOrderDeed);
            }

            return(retVal.AsReadOnly());
        }
        public bool ApplyCollectionFilter(CollectionFilterParameters parameters, CollectionBulkOrderDeed bulkOrderDeed)
        {
            var parametersCopy = parameters.Clone();

            return(ApplyCollectionFilterImpl(parametersCopy, bulkOrderDeed));
        }