// Virtual keyword = can be overwritten by subclass
        public virtual void ApplyAllFilters()
        {
            ListCollectionView list = (ListCollectionView)allCanvasesView;

            Util.MultiFilter mf = new Util.MultiFilter();

            //Favorites filter
            if (filterFavorites)
            {
                mf.AddFilter(new Predicate <object>(c => ((CCanvas)c).IsFavorite));
            }

            //Tag filters
            if (selectedTags.Count > 0)
            {
                mf.AddFilter(new Predicate <object>(c => ((CCanvas)c).tags.Any(tag => selectedTags.Contains(tag))));
            }

            //User filters
            if (selectedUsers.Count > 0)
            {
                mf.AddFilter(new Predicate <object>(c => selectedUsers.Contains(((CCanvas)c).user)));
            }

            //Search filter
            if (searchTerm != "")
            {
                mf.AddFilter(new Predicate <object>(x => ((CCanvas)x).MatchesKeyword(searchTerm)));
            }

            list.Filter = mf.Filter;
        }
        // Most of this is the same as the inherited method
        public override void ApplyAllFilters()
        {
            ListCollectionView list = (ListCollectionView)allCanvasesView;

            Util.MultiFilter mf = new Util.MultiFilter();

            //Favorites filter
            if (filterFavorites)
            {
                mf.AddFilter(new Predicate <object>(c => ((CCanvas)c).IsFavorite));
            }

            //Tag filters
            if (selectedTags.Count > 0)
            {
                mf.AddFilter(new Predicate <object>(c => ((CCanvas)c).tags.Any(tag => selectedTags.Contains(tag))));
            }

            //User filters
            if (selectedUsers.Count > 0)
            {
                mf.AddFilter(new Predicate <object>(c => selectedUsers.Contains(((CCanvas)c).user)));
            }

            //Search filter
            if (searchTerm != "")
            {
                mf.AddFilter(new Predicate <object>(c => ((CCanvas)c).MatchesKeyword(searchTerm)));
            }

            // This block is the only difference from the inherited method
            if (SelectedWSName != "All Canvases")
            {
                if (SelectedWSName != null)
                {
                    Workspace ws = _workspaceModel.allWorkspaces.Where(x => x.name == SelectedWSName).ToList()[0];
                    if (ws != null)
                    {
                        mf.AddFilter(new Predicate <object>(c => ws.Sketches.Count(s => s.canvasID == ((CCanvas)c).ID) > 0));
                    }
                }
            }

            list.Filter = mf.Filter;
        }