Archives pour la catégorie WPF

Obtics ou comment gérer de facon dynamique ses objets métiers….

N’importe quel développeur SL/WPF à l’habitude de gérer les évènements PropertyChanged, CollectionChanged et ça devient vite très chiant dans certains cas. Je vais vous présenter une libraire appelée Obtics, mais attention je vous avertis, on en tombe vite accroc.

Un cas simple, vous avez une ObservableCollection d’objet métier que vous voulez encapsuler dans un ensemble de ViewModel.

1
2
3
4
5
6
7
8
9
10
11
public class MainViewModel: ViewModelBase
{
        private readonly ObservableCollection<BusinessObject> _collection;
 
        public MainViewModel(ObservableCollection<BusinessObject> collection)
        {
            _collection = collection;
        }
 
        public IEnumerable<BusinessObjectViewModel> Entities { get; set; }
}

En temps normal, vous vous abonneriez à l’évènement CollectionChanged de l’ObservableCollection et vous gériez la fameuse routine des NotifyCollectionChangedAction.

Mais là, Obtics (comme toujours ?) va vous simplifier la vie, voici comment faire avec Obtics :

1
2
3
4
5
6
7
8
9
10
public MainViewModel(ObservableCollection<BusinessObject> collection)
{
    _collection = collection;
 
    IValueProvider<IEnumerable<BusinessObjectViewModel>> valueProvider = ExpressionObserver.Execute(
    () => _collection.Select(bo => new BusinessObjectViewModel(bo)));
 
 
    this.Entities = valueProvider.Cascade();
}

Obtics va « Compiler » votre LambdaExpression en pipeline de création d’un objet qui va automatiquement s’abonner aux évènements nécessaires pour tenir toujours à jour la valeur fournit par le IValueProvider fournit.

Dans le cas de IValueProvider<IEnumerable<T>>, il est possible de « merger » les évènements de changement de valeur de l’IEnumerable<T> pour obtenir un IEnumerable<T>.

En gros, si la propriété Value de valueProvider change alors la collection obtenue par Cascade(), va faire un NotifyCollectionChangedAction.Add, NotifyCollectionChangedAction.Remove de la différence ou un NotifyCollectionChangedAction.Reset.

 

Pour aller plus loin, imaginons que vous voulez filtrer sur vos objets qui ont la propriété « Name » commençant par « Vin », il suffit de faire :

ExpressionObserver.Execute(() => this._collection.Where(bo => bo.Name.StartsWith("Vin")).Select(bo => new BusinessObjectViewModel(bo))).Cascade();

Sympa non ?

Il y a beaucoup de principes à comprendre dans cette libraire avant de l’exploiter au maximum, j’attends vos retours pour continuer de blogger dessus…

Design Time avec Visual Studio 2010 Beta 2 (Silverlight, WPF)

Ce que je vais vous présenter à travers cet article n’est pas apparu avec la bêta 2 de Visual Studio 2010 mais a été introduit dans Blend 3. Pour les fans du MVVM, vous me comprendrez si je vous dis que ça serait sympa d’avoir un rendu du designer avec un ViewModel non vide ou de pouvoir utiliser le Binding Builder en cas d’injection du DataContext par le code ? Réjouissez-vous cela est possible. En effet, il est possible de signaler au designer que nous souhaitons utiliser une certaine instance pour notre DataContext quand nous l’utilisons, ces propriétés seront ignorées au moment de la compilation.
Continue la lecture

System.Windows.Interactivity, késako ?

System.Windows.Interactivity.dll Blend 3

Tous les jours, nous découvrons des choses… Et aujourd’hui, j’espère vous en faire découvrir. À la sortie d’Expression Blend 3, ce petit bijou nous a ramené discrètement deux assemblys :

  1. Microsoft.Expression.Interactions.dll
  2. System.Windows.Interactivity.dll

Il existe une version Silverlight, que j’utiliserai pour l’article, et une version WPF.

I. System.Windows.Interactivity.dll

Pour commencer, analysons System.Windows.Interactivity.dll à coup d’Object Browser:

Interactivity Object Browser

En fait, cette assembly nous fournit différentes classes pour interagir avec les composants de notre interface. Aujourd’hui, je vais vous montrer plusieurs manières pour exécuter une ICommand lors d’un appui sur la touche « Entrée » dans une TextBox. Pratique non ?
Continue la lecture

En bref… Silverlight 3 est là !

Silverlight 3, Logo

Comme je vous l’annonçai dans un post précédent, la version finale de Silverlight 3 est arrivé aujourd’hui, rendez-vous sur http://silverlight.net/GetStarted/ pour mettre à jour votre Runtime Silverlight et télécharger les tools pour Visual Studio. À noter que pour l’installation des tools, ils sont disponibles sur la nouvelle plateforme nommée Microsoft Web Platform qui centralise le téléchargement de l’ensemble des composants destinées au Web.
Continue la lecture

En bref… Importer des fichiers Photoshop ou Illustrator avec Blend 3

Microsoft Expression Blend 3 Preview permet d’importer des fichiers au format Photoshop (.psd) et Illustrator (.psd) pour l’intégrer dans vos projets WPF ou Silverlight 3.

Blend 3 importe directement les ressources graphiques des fichiers Photoshop et Illustrator directement au sein de vos projets en conservant les calques, les formes, le texte…

Continue la lecture