我已经获得了一个控件,允许从codeproject文章http://www.codeproject.com/KB/WPF/MultipleSelectionControl.aspx中选择多个项目。基本上它有2个列表框。一个开始于所有项目,当用户选择其中一些时,他们移动到其他列表框。 Control为两个列表定义两个依赖项属性,最初包含所有项目的属性为AvailableItems。它是在控件的ControlTemplate中使用如下:通过绑定到CollectionViewSource和定义称为过滤功能WPF - CollectionViewSource Filter不工作
<Window.Resources>
<CollectionViewSource x:Key="multiSelectDataView" Source="{Binding ElementName=DocumentRoot, Path=AllItems}" Filter="Data_Filter" />
</Window.Resources>
<UI:MultiSelectControl
x:Name="multiSelect"
Style="{StaticResource MultiSelectControlStyle}"
CurrentTitle="Group Components"
AvailableTitle="All Components"
AvailableItems="{Binding Source={StaticResource multiSelectDataView}}"
CurrentItems="{Binding SelectedItems, Mode=TwoWay}">
<UI:MultiSelectControl.ObjectsTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</UI:MultiSelectControl.ObjectsTemplate>
</UI:MultiSelectControl>
我试图筛选AvailableItems:
<ListBox
Grid.Row="2"
Grid.Column="0"
SelectionMode="Extended"
x:Name="PART_AvailableListBox"
ItemsSource="{Binding AvailableItems}"
ItemTemplate="{TemplateBinding ObjectsTemplate}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<EventSetter Event="MouseDoubleClick" Handler="AvailableListBoxItem_DoubleClick" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
我用的是控制在我的项目作为Data_Filter。 AllItems是一个List对象,它包含字符串。初始化控件时,将为AllItems中的每个项目调用Data_Filter,并为每个项目正确设置FilterEventArgs的接受属性。但是,控件会显示所有项目而不考虑Data_Filter。在控件的实现中,一个ICollectionView对象被定义为:
this.AvailableItemsCollectionView =
CollectionViewSource.GetDefaultView(this.AvailableItems);
这让我很怀疑控件正在跳过我的视图。我可以尝试在控件的实现中实现过滤,但这不是一个好的解决方案。有什么建议么?
我知道,但如何以最少的改变来完成控制代码。我期待更详细的解决方案,只能通过检查我给出的链接中的控制代码来完成。 –
根据您发布的代码,看起来好像不需要更改控制代码就可以完成,因为原始程序员正在请求默认集合视图,而没有其他选择。 – sellmeadog