ListCollectionView, который ограничивает количество элементов - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь реализовать представление коллекции, позволяющее ограничить количество отфильтрованных элементов.

Я придумал эту реализацию

public class LimitCollectionView : ListCollectionView
{
    #region CONSTRUCTOR
    public LimitCollectionView(IList source) : base(source)
    {          
    }
    #endregion

    #region FIELDS
    private int MAX_ITEMS = 0;
    #endregion

    #region PROPERTIES

    /// <summary>
    /// Gets or sets maximum amount of view items.
    /// </summary>
    public int MaxItems
    {
        get { return MAX_ITEMS; }
        set
        {
            MAX_ITEMS = value;
            OnPropertyChanged(new ComponentModel.PropertyChangedEventArgs(nameof(MaxItems)));
            RefreshOrDefer();
        }
    }

    #endregion

    #region OVERRIDES       

    /// <summary>
    /// Gets the estimated number of records.
    /// </summary>
    public override int Count
    {
        get
        {
            if (IsRefreshDeferred)
                return 0;

            if (MaxItems <= 0)
                return base.Count;        

            var baseCount = base.Count;

            if (MaxItems > baseCount)
                return baseCount;

            return Math.Min(MaxItems,baseCount);
        }
    }

    public override bool PassesFilter(object item)
    {
        if (!base.PassesFilter(item))
            return false;

        if(item!=null)
        {
            return IndexOf(item) < MaxItems;
        }

        return true;
    }

    #endregion
}

В большинстве случаев реализация работает как задумано, НО в некоторых случаях я получаю System.InvalidOperationException: ItemsControl несовместим с источником своих элементов.

Так что я полагаю, что есть несоответствие с тем, что ожидает ItemsControl и что мои отчеты CollectionView. Так что вопрос в том, что я пропустил что-то в моей реализации? Возможно ли даже иметь реализацию, которая работает?

Я знаю, что могу отфильтровать элементы вручную и заново создать коллекцию при изменении, но это лучше, чем цель CollectionView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...