[WPF] L’objet CollectionViewSource de WPF, indispensable pour développer des applications métier !
L’objet CollectionViewSource de Windows Presentation Foundation est un composant indispensable du développement d’applications métier. Cet article a pour but de vous fournir un aperçu des fonctionnalités de cet objet.
Présentation de l’objet CollectionViewSource:
Cet objet est une surcouche que l’on utilise lorsque l’on manipule des collections d’objets. Cette couche supplémentaire offre la possibilité de trier/grouper/filtrer des données de façon très simple. Bien sur, il est tout à fait possible d’effectuer ce genre d’opérations par vous-même sur votre collection mais l’objet CollectionViewSource vous permet de le faire de façon automatique: vous n’avez rien besoin de gérer 
Filtrer les données:
Pour filtrer les données, rien de plus simple. En effet, le type CollectionViewSource possède un évènement nommé Filter auxquel il est possible de s’abonner. Cet évènement survient pour chacun des éléments de la collection sous-jacente: vous avez alors la possibilité d’indiquer si vous souhaitez (ou non) inclure l’élément dans la “vue” finale, via la propriété Accepted:
var cvsEmployees = this.grid.TryFindResource("cvsEmployees") as CollectionViewSource;
if (cvsEmployees != null)
{
cvsEmployees.Filter += this.cvsEmployees_Filter;
cvsEmployees.Source = new ObservableCollection<Employees>(
from employee in ctx.Employees.Include("Orders")
select employee);
this.dgEmployees.DataContext = cvsEmployees;
}
private void cvsEmployees_Filter(object sender, FilterEventArgs e)
{
var employees = e.Item as Employees;
if(employees != null)
{
e.Accepted = employees.EmployeeID > 5;
}
}
Ici, vous pouvez constater que l’on ne sélectionne que les élément dont le numéro d’employé est supérieur à 5:
Trier les données:
Pour trier des données, là encore, c’est relativement simple. En effet, il suffit de passer par la propriété SortDescriptions qui n’est rien d’autre qu’une collection d’objets de type SortDescription qui servent à indiquer en fonction de quelle propriété trier les informations:
cvsEmployees.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending));
Etant donné qu’il s’agit d’une collection, vous avez la possibilité d’ajouter plusieurs critères de tri:
cvsEmployees.SortDescriptions.Add(new SortDescription("LastName", ListSortDirection.Ascending));
cvsEmployees.SortDescriptions.Add(new SortDescription("FirstName", ListSortDirection.Ascending));
En ce qui concerne l’exécution, cela ne change rien: les données sont d’abord triées en fonction de la première propriété indiquée, puis de la deuxième, etc…
Grouper les données:
Cependant, ce n’est pas tout: WPF vous permet aussi d’utiliser cet objet pour grouper vos informations en fonction d’une propriété. Pour cela, c’est très similaire au tri mis à part le fait que l’on utilise la collection GroupDescriptions:
cvsEmployees.GroupDescriptions.Add(new PropertyGroupDescription("BirthDate"));
Attention, pour que cela fonctionne, il est nécessaire de spécifier le style que doivent avoir les entêtes. Pour spécifier le style par défaut, utiliser ce code XAML:
<ctrl:DataGrid.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</ctrl:DataGrid.GroupStyle>
A l’exécution, les données sont bien regroupées en fonction de la propriété indiquée, comme le confirme la capture suivante:
Certes, sur la DataGrid, l’exemple n’est peut-être pas très parlant. Mais observez donc l’image suivante, qui affiche une liste d’utilisateurs, regroupés par leur propriété Office:
Comme vous pouvez le voir, le résultat est plutôt convaincant et extrèmement simple à mettre en place 
Conclusions:
Comme vous avez pû le constater, l’objet CollectionViewSource est extrêmement simple à utiliser et vous permet de développer de véritables applications dîtes métier: libre à vous de réfléchir aux différentes fonctionnalités qu’il serait intéressant d’implémenter dans vos applications !
En cas de besoins ou si vous avez des questions, n’hésitez pas à me contacter: je serais ravi de venir vous présenter le sujet ou de vous répondre 
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :