У меня есть UserControl, который отображает некоторую коллекцию, которая должна быть отфильтрована, но коллекция, переданная в элемент управления, может быть отфильтрована в главном окне. Это выглядит так:
Window1.xaml
<Window x:Class="CollectionViewSourceTesting.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:CollectionViewSourceTesting="clr-namespace:CollectionViewSourceTesting"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<CollectionViewSource Source="{Binding Data}" x:Key="ItemsViewSource" Filter="CollectionViewSource_Filter" />
</Window.Resources>
<Grid>
<CollectionViewSourceTesting:UserControl1 DataContext="{Binding Source={StaticResource ItemsViewSource}}" />
</Grid>
</Window>
UserControl1.xaml
<UserControl x:Class="CollectionViewSourceTesting.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid>
<Grid.Resources>
<CollectionViewSource Source="{Binding}" x:Key="cvs" Filter="CollectionViewSource_Filter" />
</Grid.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource cvs}}" />
</Grid>
</UserControl>
Это не работает, так как CollectionViewSource.Source не принимает ListCollectionView, он выдает исключение «System.Windows.Data.ListCollectionView» не является допустимым значением для свойства «Source». ".
Я подумал, что мог бы использовать событие DataContextChanged в UserControl, чтобы вручную добавить фильтрацию в ListCollectionView, но это не было бы вложением, и мне также нужно было бы установить свойство ListBox.ItemsSource вручную. Я бы использовал существующее представление и изменил бы свойство Filter. То, что я хочу сделать, это создать другое представление, используя CollectionViewSource, чтобы я мог вставить в xaml. Это возможно?
Я хочу, чтобы мой UserControl обрабатывал обычную коллекцию, а также CollectionViews.