Если я правильно читаю ваши фрагменты кода, да, представление вашей коллекции никогда не используется; GetDefaultView
не возвращает никаких представлений, которые были явно созданы CollectionViewSource.
Похоже, что элемент управления необходимо реорганизовать, чтобы предложить свойство AvailableItemsSource
, которое позволит вам указать отфильтрованное представление коллекции. Внутренняя логика должна затем использовать источник элементов перед созданием представления по умолчанию.
UPDATE
Вот что вы можете попробовать:
Определите модель представления, которая предоставляет коллекцию доступных элементов, с которыми можно связать представление. Модель представления теперь будет отвечать за фильтрацию представления коллекции по умолчанию . Вам нужно решить, как запустить фильтрацию, т. Е. Через команды или установщики свойств и т. Д., Но в этом примере я покажу настройку фильтра в конструкторе модели представления:
public class MyViewModel
{
public IList MyAvailableItems {...}
public MyViewModel()
{
var defaultView = CollectionViewSource.GetDefaultView(MyAvailableItems);
defaultView.Filter = ...
}
}
Причина, по которой это должно работать, заключается в том, что CollectionViewSource.GetDefaultView(...)
всегда возвращает одно и то же представление. Таким образом, если элемент управления всегда запрашивает представление по умолчанию, и ваша модель представления добавила к нему фильтр, вы должны получить желаемый эффект без явного создания CollectionViewSource
в XAML.