Использование ICollectionViewFactory с CompositeCollections и ItemsControls - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть собственный класс коллекции, который реализует IList<T>, INotifyCollectionChanged и ICollectionViewFactory.

Реализация ICollectionViewFactory.CreateView выглядит примерно так:

public ICollectionView CreateView()
{
    var src = new CollectionViewSource() { Source = InnerList };

    if (SortDescriptions.Any())
    {
        SortDescriptions.ForEach(sd =>
        {
            src.SortDescriptions.Add(sd);
            src.LiveSortingProperties.Add(sd.PropertyName);
        });
        src.IsLiveSortingRequested = true;
    }

    bool addFilter = Filter != null && FilterProperties.Any();

    if (addFilter)
    {
        FilterProperties.ForEach(f => src.LiveFilteringProperties.Add(f));
        src.IsLiveFilteringRequested = true;
    }
    var view = src.View;

    if (addFilter)
    {
        view.Filter = i => Filter((T)i);
    }

    view.CurrentChanging += View_CurrentChanging;
    view.CollectionChanged += View_CollectionChanged; ;
    return view;
}

Вприведенный выше код InnerList ссылается на пользовательский класс коллекции.И SortDescriptions, Filter и FilterProperties заполнены правильно.

Мои вопросы:

Если я добавлю экземпляр своего пользовательского класса коллекции в CompositeCollection для использования с привязкамивот так:

Items = new CompositeCollection { new CollectionContainer() { Collection = myCustomInstance } }

... будет ли WPF использовать мою реализацию интерфейса ICollectionViewFactory?Или я должен использовать myCustomInstance.CreateView()?

Кроме того, при назначении моей коллекции непосредственно свойству ComboBox.ItemsSource (сценарий A) элементы отображаются в неправильном порядке (очевидно: последний добавленный является первым в списке), т.е.мои SortDescriptions не считаются.

Если я присваиваю myCustomInstance.CreateView() ComboBox (сценарий B), элементы сортируются правильно, но - в обоих случаях - если я затем добавляю элемент, этовсегда добавляется как первый в ComboxBox.Если я создаю другой экземпляр элемента управления, элементы сортируются, как они были раньше, соответственно: правильно в сценарии B и неправильно в сценарии A.

Далее:

  • В моемСлучаи использования, на самом деле, проблемы являются отдельными, то есть я не использую CompositeCollection в ComboBox.
  • . CompositeCollection, кажется, имеет одинаковые проблемы с порядком, также в обоих сценариях, A& B.
  • Проблема ComboxBox возникает не во всех случаях последовательно: если я создаю ее в практически пустом окне, она работает нормально.К сожалению, я не могу извлечь больше демонстрационного кода (из довольно сложного приложения) - также, потому что я не знаю, какие части актуальны.
  • Я также не смог (успел) выделить CompositeCollection выпуск;это очень динамично TreeView, к вашему сведению.

В конечном счете: CompositeCollections использует ICollectionViewFactory и где мне искать причину проблем ComboBox?

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