Converters give you a lot supremacy as it allows you
to insert an object between a source and a target object. At high level,
converters are a chunk of custom code that hooked up through the binding and
data will flow via that converter. So, whenever data is flown from source to
target, one can change the value or can change the type of object that needs to be set on
target property.
So, whenever data travels from source to target, it can be transformed in two ways:
Data value: Here transformation will be done with just the
value by keeping the data type intact. For example, for number fields, you can
transform value to floating point number to an integer, by keeping the actual
value as a float.
Data type: One can
also transform the data type. For example, setting a style based on some
Boolean flag, this is one of the most common example. Isn't it?
Defining a converter:
Defining any converter requires implementation of
IValueConverter interface in a class. This interface has two methods:
Convert: Is called when data is flowing from source to the
target
ConvertBack: Is called when data is flowing from target to
source. It is basically useful in two-way binding scenarios
Where to place converters:
To implement IValueConverter, one has to create a class and
then put the instance of that class in a ResourceDictionary within your UI.
How to use:
Once your class is part of ResourceDictionary, then you can
point to the instance of converter using the Converter property of Binding,
along with StaticResource markup extension.
Using Code:
Before digging into the code, let’s discuss on
what I want to achieve with below code snippet. Whenever value entered by the user
is negative, I want to display 0 with * as a final amount.
So,
let’s start by creating a class called RoundingOffConverter and inherit
IValueConverter as shown below:
ConvertBack method will be called when you have two-way data
binding and direction of data flow is from target to source object.
Code for using Data Value:
Now coming to XAML, first I need to add a reference of my
converter class and then need to add that as a resource. It goes, here:
Once the reference is added, I have to bind this converter
to my TextBox object as:
Once everything is in place, let’s run this application. You
will find below output:
Code for using Data Type: Here aim is to select a style based on a
Boolean property or in other words user want to change the color of a text box
based on checkbox status. So let’s go ahead and write our BoolToStyleConverter.
Now in order to use above styles in application, one has to
add these as a Window Resources as shown below:
Once the converter is added to resources, next step is to
use this converter in our UI. So, let’s add:
We are done. Now quickly run this application and you will
find color change based on text box as:
Hope this tutorial on converter was useful.
Comments
Post a Comment