J'ai acquis un contrôle qui permet de sélectionner plusieurs éléments de l'article codeproject http://www.codeproject.com/KB/WPF/MultipleSelectionControl.aspx. Fondamentalement, il a 2 listes de sélection. On commence avec tous les articles et quand l'utilisateur en sélectionne certains, ils passent à une autre liste. Le contrôle définit deux propriétés de dépendance pour les deux listes et celle qui contient initialement tous les éléments est AvailableItems. Il est utilisé dans ControlTemplate de contrôle comme suit:WPF - Le filtre CollectionViewSource ne fonctionne pas
<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>
J'utilise le contrôle dans mon projet:
<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>
Je suis en train de filtrer AvailableItems par liaison à un CollectionViewSource et définissant une fonction de filtre appelé Data_Filter. AllItems est un objet List et contient des chaînes. Lorsque le contrôle est initialisé, Data_Filter est appelé pour chaque élément dans AllItems et la propriété acceptée de FilterEventArgs est définie correctement pour chaque élément. Cependant, le contrôle affiche tous les éléments sans tenir compte du Data_Filter. Dans la mise en œuvre de contrôle d'un objet ICollectionView est défini comme:
this.AvailableItemsCollectionView =
CollectionViewSource.GetDefaultView(this.AvailableItems);
qui me rend suspecte que le contrôle saute mon avis. Je peux essayer d'implémenter le filtrage dans la mise en œuvre du contrôle, mais ce n'est pas une bonne solution. Aucune suggestion?
Je sais cela, mais comment cela peut-il être fait avec un minimum de changement de code de contrôle. J'attends une solution plus détaillée qui ne peut être faite qu'en inspectant le code de contrôle dans le lien que j'ai donné. –
Basé sur le code que vous avez posté, il ne semble pas que cela puisse être fait sans changer le code de contrôle parce que le programmeur d'origine demande la vue de collection par défaut sans alternatives. – sellmeadog