我已經獲得了一個控件,允許從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