Another .NET Blog

To content | To menu | To search

Tag - Reactive Extensions

Entries feed - Comments feed

Monday 21 February 2011

[CaliburnMicro] Dependencies attribute on any depth level of properties

I didn't post anything on the blog for a very long time (2010-12-07), so let's break the silence with something new about Caliburn Micro.

In this post, I will briefly show you an update of an "old" article I wrote. The main drawback of the previous version of this dependencies attribute was its inability to make the availability of the action depend on more than one level.

For example, you could write these dependencies, which update the availability of the Do method when either OtherProperty (a property of the same view-model than Do) or OtherProperty.ChildProperty were modified.

[Dependencies("OtherProperty", "OtherProperty.ChildProperty")]
public IEnumerable<IResult> Do()
{

}

With the new Dependencies attribute I'll show you right after the break, you won't be limited to this single level of hierarchy, thus allowing you to write a dependency like:

[Dependencies("OtherProperty.ChildProperty.OneMoreLevelProperty.LastLevelProperty.*")]
public IEnumerable<IResult> Do()
{

}

Continue reading...

Thursday 18 November 2010

[PostSharp] [Caliburn] Automatic IEventPublisher subscription and publication

If you develop in WPF using the MVVM pattern, you have certainly heard about the Event Aggregator pattern, which allows, as the MSDN says:

decoupling of publishers and subscribers so they can evolve independently.

There are several implementations of this pattern:

Of course, as the title of this article told you, we are going to use the latter, and I will propose an implementation of a PostSharp aspect which will help us to subscribe to events, publish them, and dispose the subscriptions when the view-model is deactivated.

Continue reading...

Monday 4 October 2010

[Caliburn Micro] Action filters - Dependencies on "properties of properties", using the Reactive Extensions

By default, Caliburn Micro (CM) doesn't contain the action filters which belong to Caliburn (C). There is a recipe on how to implement them back in CM, but unfortunately it doesn't cover all the initial functionalities which are in C.

One feature missing, and that I needed, is the possibility to depend on "properties of properties".

With the recipe, you can add a dependency between the property of a view-model (VM) and another property of this same VM. Thus, when the latter property is changed, the PropertyChanged event of the VM is fired, resulting in the update of the availability of the action on which the Dependencies attribute is put. But what it doesn't allow you to do, is to define something like:

[Dependencies("OtherProperty.ChildProperty")]

This would update the availability of the action if OtherProperty implements INotifyPropertyChanged and if the ChildProperty is modified. You could even use something like:

[Dependencies("OtherProperty.*")]

which would update the availability if any of the properties of OtherProperty is modified.

But let me show you how I implemented this feature on top of the recipe, with the great use of the Reactive Extensions.

Continue reading...

Monday 17 May 2010

Rx: Nouvelle release

Une petite news rapide pour vous informer qu'une nouvelle version des Reactive Extensions a vu le jour vendredi dernier.

La release note se trouve ici. Et pour télécharger tout ça, c'est .

Et si vous ne connaissez pas cette API, n'hésitez pas à aller faire un tour ici, pour y découvrir les quelques articles que je lui ai consacré.

Thursday 13 May 2010

Rx: Exécuter une action de manière asynchrone

Pour clore le chapitre sur l'utilisation de Rx pour mon application de gestion de mises à jour, je vais terminer comme annoncé par vous montrer comment je lance les exécutables téléchargés de manière asynchrone, afin de ne pas bloquer le thread de la vue pendant l'installation.

Continue reading...

Wednesday 12 May 2010

Rx: Fusionner plusieurs Observable en un seul

Cet article est un prolongement de l'article précédent, puisqu'après avoir vu comment lancer le téléchargement de toutes les mises à jour et être notifié quand tout est terminé, nous allons cette fois voir comment récupérer une liste d'observables (chacun d'entre eux correspondant à l'installation d'une mise à jour), les fusionner en un seul, afin de pouvoir exécuter les mises à jour les unes après les autres, avec un arrête automatique dès lors qu'une mise à jour se passe mal.

Continue reading...

Tuesday 11 May 2010

Rx: Exécuter plusieurs observables et attendre qu'ils soient tous terminés

On continue avec la petite série d'articles Rx avec cette fois une nouvelle résolution de "problème". On a vu lors de l'article précédent comment ignorer les erreurs lorsque des adresses de téléchargement étaient invalides ou injoignables. Nous allons voir cette fois-ci comment lancer tous les téléchargements simultanément et comment attendre qu'ils soient tous terminés avant de les exécuter les uns après les autres pour les installer.

Continue reading...

Monday 10 May 2010

Rx: Opérateur Catch, ou comment ignorer des erreurs

Suite à mon article introductif sur les Reactive Extensions, je vais enchainer sur le même sujet une série d'articles (6 pour le moment sont prévus), bien plus courts que le dernier en date, et qui se focaliseront sur une manière de faire ou résoudre un problème précis que l'on peut rencontrer en utilisant cette API. Le premier article, ici-même, va s'attarder sur l'une des méthodes d'extension de Rx: Catch. Qui comme son nom le laisse supposer, a à voir avec les exceptions.

Continue reading...

Monday 12 April 2010

Introduction aux Reactive Extensions : Télécharger un fichier en asynchrone

J'ai déjà parlé à plusieurs reprises des reactives extensions, que l'on appelle plus familièrement Rx. Je me suis dit que ce serait une bonne idée que de vous les présenter plus en détail. Je ne vais pas écrire un article qui va tout vous expliquer depuis le début, car il existe déjà beaucoup de ressources. (ici, ici, ou bien ici, ou même encore ) Je me suis donc dit que ça serait peut-être une meilleure idée que de vous expliquer comment ça peut fonctionner grâce à un exemple concret. Et comme j'avais déjà un article expliquant comment réaliser une opération asynchrone en utilisant la TPL, j'ai repris cet exemple, en utilisant cette fois Rx.

Continue reading...

Monday 8 March 2010

Reactive Extensions

En fin de semaine dernière est sortie la dernière release des Reactive Extensions.

Beaucoup de changements sur la release note, mais on notera principalement la compatibilité .Net 4 RC.

A voir également, une vidéo de 22' sur Channel 9.

Source : Bart De Smet'S

Thursday 21 January 2010

Rx Framework

Ça fait quelques temps que je vois fleurir sur internet des références de plus en plus nombreuses aux Reactive Extensions, plus communément appelé Rx. Je ne savais pas trop ce que c'était (j'en sais un peu plus maintenant, mais le sujet a l'air d'être... disons, vaste), et c'est 2 posts (ici et ) sur le blog de Jon Skeet qui m'ont enfin décidé à aller voir sur devlabs de quoi il en retournait.

Et je dois bien dire que je suis bluffé. Mais vraiment. Je crois bien que l'on a ici un framework qui devrait radicalement changer notre manière de travailler. Alors bien sûr j'en ai vu trop peu pour être réellement objectif et constructif sur le sujet, et je vais regarder quelques vidéos sur Channel9 sur le sujet avant de m'en faire une idée précise, mais je suis déjà sous le choc.

Pour vous faire une idée de ce qu'est la "bête", je vous recommande plus que chaudement de commencer par cette vidéo, où l'un des développeurs de la librairie (accessoirement aussi l'un des co-fondateurs de LINQ, ça aide) nous explique grossièrement l'objectif de Rx. Et avant de regarder la pléthore de vidéos disponibles sur Channel9 ( ce que je dois encore faire également), jetez tout de suite un oeil à cette vidéo, qui est un cas concret du fonctionnement de Rx, et où on se rend compte de sa puissance à travers un exemple concret: comment implémenter du drag 'n drop d'un contrôle WPF dans une fenêtre au runtime.

Mais je dois vous laisser, j'ai encore BEAUCOUP de vidéos à aller regarder, là, maintenant ;)