Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[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 Smile

 

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:

image

 

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…

image

 

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:

image

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:

image

Comme vous pouvez le voir, le résultat est plutôt convaincant et extrèmement simple à mettre en place Smile

 

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 Wink

 

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 :
Posted: mercredi 3 décembre 2008 10:37 par Thomas LEBRUN
Classé sous : , , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25