When implementing a user interface in WPF/MVVM applications we frequently encounter situations where we want to be able to react on all changes made to a particular property.
One way to handle this is to create an observable sequence of values with Reactive Extensions (Rx). This is especially valuable if we have other event streams that interact with the property changed events.
There are several libraries around that can help with this like e.g. ReactiveUI or ReactiveProperty.
But if we want a lightweight, generic, reusable, and typesafe solution, we can consider just using the following extension method, which can be called on any instance that implements
INotifyPropertyChanged. It retrieves the property name from the expression that is passed in, converts all
PropertyChanged events into an observable sequence, and then finds the value of the right property using reflection.
Continue reading →
Function composition is about the essence of programming. Complex problems can be solved by decomposing them into many smaller problems that each can be worked out easily. Finally those small pieces have to be put together to form the overall solution. One way of combining these small pieces is function composition.
Also function composition is a great tool that makes the code more compact and reduces noise. Because of the concise syntax there are fewer possibilities to make mistakes like mixing up parameters e.g.
In this post I will show how function composition can be implemented in C# and how it is related to currying and partial application. Also I will discuss the pros and cons of function composition in C# and point out an alternative. All C# source code from this post can be downloaded here.
Continue reading →
Reactive Extensions is a library for composing event based programs using observable sequences and LINQ-style query operators.
I wrote a series of blog posts on Reactive Extension covering some theory and including some practical examples in C#:
Series: Reactive Extensions in theory and practice
- Short introduction to Reactive Extensions
- Visualizing sequences
- Drawing lines with Rx
- Twitter with Rx