J'ai cette situation où je veux afficher une liste d'objets d'administration et une zone de liste déroulante pour chaque administration. Dans cette zone de liste déroulante, je veux une liste avec les employés appartenant à cette administration, avec une option vide. J'ai donc besoin de filtrer en fonction de l'administration.Filtrage dynamique avec une zone de liste déroulante ItemsControl
Jusqu'à présent, je suis venu avec le code suivant (note: les noms d'objets ont été traduits)
<ItemsControl x:Name="listAdministrations" ItemsSource="{Binding Path=AllAdministrations}" Margin="0,0,0,6">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" >
<TextBox Content="{Binding Path=AdministrationName}" />
<StackPanel Orientation="Horizontal" Margin="14,0,0,0">
<Label>Declares under:</Label>
<ComboBox DisplayMemberPath="DisplayFullName">
<ComboBox.ItemsSource>
<CompositeCollection>
<!-- empty option -->
<model:Employee DisplayFullName="-" />
<CollectionContainer Collection="{Binding Source={StaticResource employeeCV}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Le employeeCV de ressource statique est un CollectionViewSource avec un événement de filtre ci-joint. Mais je dois en quelque sorte passer l'administration actuelle dans la boucle ItemsControl à cet événement. Dans la liaison de données, cela se traduit par {Binding Path =.} Dans ItemsControl. L'objet expéditeur est mon CollectionViewSource mais cela ne fournit aucune donnée utile.
Quelque chose comme ceci:
private void EmployeeAdministrationFilter(object sender, FilterEventArgs e)
{
Employee employee = (Employee)e.Item;
Administration administration; // how do I pass the administration to this filter?
}
Antonmarkov, voulez-vous dire quelque chose comme ceci: (pseudo-code) public class administration { publique CollectionViewSource CollectionViewSource { get; jeu privé; Administration publique() { CollectionViewSource = new CollectionViewSource(); CollectionViewSource.Filter + = EmployeeAdministrationFilter; } EmployeeAdministrationFilter private void (object sender, FilterEventArgs e) { // stuff filtre // this = administration } } – Frederik
Oui, si vous pouvez modifier l'administration, vous pouvez simplement ajouter la propriété directement. Vous devriez probablement utiliser un simple CollectionView au lieu de CollectionViewSource. CollectionViewSource est une extension de balisage à utiliser dans XAML. – Anton