0

Я создаю публичный CollectionView (cvs) и привяжу его к элементу управления ListView в приложении WPF. Затем есть серия фильтров, которые добавляют делегатов для фильтрации моего объекта cvs. Все работает отлично в этом аспекте программы.Могу ли я передать фильтрованный CollectionViewSource методу?

public ICollectionView cvs { get; set; } 
public ObservableCollection<T> TLIST 
... 
cvs = CollectionViewSource.GetDefaultView(TLIST); 
ListViewName.ItemsSource = cvs; 
... 
//Filters created 
cvs.Filter = groupFilter.Filter; 

Что я пытаюсь сделать, это создать файлы Excel из элементов в моем списке. Я могу отправить всю коллекцию (TLIST) в OpenXML-функцию и создать мои файлы в порядке. Там, где я борюсь, я хочу только отправить отфильтрованные элементы в функцию и цифру, мне нужно как-то отправить фильтрованные cvs.

Короче говоря, я пытаюсь получить это ->cvs.ToList(), но это недействительная операция. и получаю ошибку

«Не удается привести объект типа 'System.Windows.Data.ListCollectionView' к типу« System.Collections.Generic.List`1"

Все вопиюще очевидное что я делаю неправильно? Любые рекомендации приветствуются.

Примечание: Даже когда я проверяю cvs, он показывает все элементы, а не только отфильтрованные.

+0

Насколько я понимаю, я мог бы, возможно, просто отфильтровать свой TLIST с теми же критериями, но надеялся, что существует более умный способ использовать мою уже отфильтрованную коллекцию. – markokstate

+0

Похоже, вы пытаетесь сохранить ListCollectionView в переменной (или передать как параметр), которая определена как List , и вы не указали этот код. Если следующая строка была «var something = cvs.ToList();« Я бы ожидал, что эта строка будет работать нормально. –

+0

Я пытаюсь преобразовать cvs.ToList() через "var list = (Список ) cvs.ToList();" – markokstate

ответ

0

Вы можете попробовать нижеследующее, что дает отфильтрованный список.

List<MyObject> lst = cvs.Cast<MyObject>().ToList(); 
+0

и бинго было его имя-O – markokstate

+0

Да, элемент CollectionView не поддерживает новый IEnumerable , но использует старый IEnumerable, который необходимо использовать для большинства операций для работы над ним. –

Смежные вопросы