Aller au contenu

avril 7, 2011

2

WPF ItemsControl Generic Static/Real time filter custom control : French/English Presentation

(Approximative) ENGLISH

Here it is ! After several weeks of hard work, the first stable release of my WPF Smart Search is now available.

Smart Search , hu ??

Yeah ! This component “searches” (actually it kind of filters) in a very “smart” way. To summarize, this user control, which is fully XAML declarative (no need for C# or VB code to make it work), hooks itself to any WPF control which inherits from the ItemsControl Framework class.

You just have to define the type of the underlying collection objects, as well as the properties of these object on which you want to apply the filter. These properties are often, but not always (and this is not mandatory) the field names (or display member path) which are displayed in you user control. You can also indicate, for each one of these properties independantly is you want to monitor property changed event such that the control can update filter in real time. Finaly, of course, you have to indicate the ItemsControl (datagrid, listbox,combobox, etc.) on which the smart search component has to hook itself. And there you go !

After that, you just have to enter the terms on which you want to filter collection items by typing them in the dedicated input box, and the collection view updates itself accordingly without ever touching the original collection. The given underlying collection can be any “static” list (List<T>), or more WPF specialized list (ObservableCollection<T>), or even a collection view source that you had previously declared in XAML resources.

The items in the collection can be of any type (reference of value type), and one smart search control can encapsulate many search “scopes” (each one associated to an items control) and thus filter simultaneously many controls, even if each of them encapsulate collections of different types.

The goal of this post is mainly to give you the “big picture” about this user control. Later, other posts will come to explain, with sample code, each features and functionalities.

You can of course follow the news regarding the smart search by subscribing to this blog’s RSS feeds or by browsing directly into it’s dedicated category : http://dotnetexplorer.blog.com/category/net/wpf/custom-user-controls/wpf-smart-search/

So, no more waiting, here is what should be the following posts agenda :

  1. Static search and filter, “scope” notion and how to “XAML declare” the control
  2. How to reference value converter in PropertyFilter objects to format search terms the same way as your items control displays data in the UI.
  3. Real time filter when adding / removing items from the underlying collection
  4. Real time filtering when object properties gets modified
  5. Customization (developper’s side and user’s side)
  6. General smart search control mechanics based on the “man in the middle” principle

Of course, “last but not least”, the sources as well as sample application are available here : http://code.google.com/p/wpf-itemscontrol-smartsearch/

I currently work a lot on this user control, so it is in constant evolution. Sources are thus subject to frequent changes. Binaries of the current stable release are available for download on the GoogleCode project page in the “Download” section (http://code.google.com/p/wpf-itemscontrol-smartsearch/downloads/list). Finaly, don’t hesitate to send me your feedbak, recomendations, bugs, etc. To do so, I encourage you to use tue issue tracker of the project page, available here http://code.google.com/p/wpf-itemscontrol-smartsearch/issues/list.

Well, that”s all for now… Enjoy and see you soon !

FRENCH

Et voilà après plusieurs semaines de gestation, la première version opérationnelle de mon Smart Search WPF est enfin disponible.

Smart Search ?? O_o

Et oui il “search” (en fait il filtre plutôt) de façon très “smart”. Pour faire court, ce control, qui se déclare entièrement en XAML (vous n’avez besoin d’aucun code C# ou VB pour le faire fonctionner), se greffe à n’importe quel contrôle WPF héritant de la classe du Framework ItemsControl.Vous lui définissez les champs du type de l’objet sous jacent à la collection sur lesquels filtrer les objets (qui sont souvent, mais ce n’est pas obligatoire, les même champs qui sont affiché dans votre ItemsControl), vous indiquez (pour chaque propriété individuellement) si vous voulez surveillez ou non les changement de la valeur des propriétés sur cet objet pour mettre a jour le filtre en temps réel, vous lui indiquez le type sous jacent et finalement, bien sûr, le contrôle sur lequel “s’accrocher”. Et hop, le tour est joué !

Vous n’avez plus qu’à saisir dans la TextBox les valeurs sur lesquelles filtrer les objets et la collection dans votre contrôle se met à jour. L’ItemSource du control peut aussi bien être une liste statique standard (List<T>), qu’une observable collection (ObservableCollection<T>) ou même un CollectionViewSource défini dans les ressources du XAML.

Les objets de la collection peuvent êtres de n’importe quel type et un même contrôle Smart Search peut encapsuler plusieurs “scopes” de recherche (chacun associé à un contrôle) et filtrer ainsi en même temps plusieurs ItemsControl, hébergeant des listes de même types ou de types différents.

Ce billet à pour principal objectif de présenter le contrôle “en gros”. D’autres post séparés suivront pour en expliquer, extrait de code à l’appui, ses principales fonctionnalités.

Vous pouvez bien sûr suivre l’actualité de ce composant via la flux RSS du blog ou directement en accèdant à la sa catégorie dédiée : http://dotnetexplorer.blog.com/category/net/wpf/custom-user-controls/wpf-smart-search/

Donc, le programmes des prochains posts consacrés à ce composant devrait être le suivant :

  1. Recherche statique, notion de scope, comment déclarer le composant en XAML (disponible en anglais uniquement pour le moment)
  2. Formatage de la recherche en référençant des converters dans les objets PropertyFilter
  3. Filtrage en temps réel lors de l’ajout /suppression d’items à la liste sous-jacente
  4. Filtrage en temps réel lors de la modification des propriétés des objets déjà présents dans la collection
  5. Customisation (côté développeur et côté utilisateur)
  6. Principe de fonctionnement du composant : “Man in the middle”.

Bien évidement, “last but not least”, toutes les sources accompagnées d’un projet de démo sont disponible sur GoogleCode à l’adresse suivante : http://code.google.com/p/wpf-itemscontrol-smartsearch/

Ce composant est actuellement en constante évolution et les sources sont donc sujette à des changements fréquents. Les binaires de la version stable sont disponibles en téléchargement sur la page du projet, section “Downloads” (http://code.google.com/p/wpf-itemscontrol-smartsearch/downloads/list). Et bien sûr, n’hésitez pas me faire remonter vos remarques, recommendations, bugs, etc. Vous pouvez pour ce faire centraliser tout ça sur le issue tracker du projet (http://code.google.com/p/wpf-itemscontrol-smartsearch/issues/list)

A très bientôt !

  1. Prakash
    juin 1 2011

    Hi,

    It really looks awesome to have such kind of generic Smartserach.
    where do you have sample application on how to use this Custom control. I’m working on similar requirement for smart search in ListBox items in Silverlight.
    Can we use (or convert) this custom control for silverlight applications.

    Répondre

Laisser un commentaire