Ok, manchmal sind die Reactive Extensions sehr gesprächig im vergleich zur “klassischen” Programmierung.
Die Aufgabe: Auf das Event NotifyPropertyChanged mit dem PropertyNamen “PicturePath” hören und eine Liste neu füllen.
Klassisch
Handler einhängen
PropertyChanged += HandlePicturePathChanged;
Prüfung in der Methode.
void HandlePicturePathChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != „PicturePath“)
return;
Reactive
Subscription auf Event-Handler
Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(h => PropertyChanged += h, h => PropertyChanged -= h).
Where(e => e.EventArgs.PropertyName == „PicturePath“).Subscribe(_ => HandlePicturePathChanged());
Die Methode kümmert sich nur um “ihre Dinge”.
void HandlePicturePathChanged()
{
Meinung (gefühlt)
Der reaktive Ansatz ist besser im Sinne von “Seperation of Concerns”, dafür aber sehr gesprächig. Da ich ungerne viel tippe bin ich in diesem Fall nicht überzeugt.
Schöner wird es, wenn man auf mehrere Teilmengen des Eventstroms wartet.
var propChanged =
Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(h => PropertyChanged += h, h => PropertyChanged -= h);
propChanged.Where(e => e.EventArgs.PropertyName == „PicturePath“).Subscribe(_ => HandlePicturePathChanged());
propChanged.Where(e => e.EventArgs.PropertyName == „ActiveProject“).Subscribe(_ => HandleActiveProjectChanged());
(Ich mag Rx)