Wednesday, 12 January 2011

Converter Parameter with bound variable

You will run into a situation where you need to convert a value based on another value in the object. As you would know by now, you can not use {Binding variable} in convert parameter. If you do, even though you will not any compilation error, you will get run time error. So how do we do that. You can pass static variable in the convert parameter.

So a simple work around for this problem would be to bind as following in your XAML.

 <c1:Column Header="Amount" Binding="{Binding Converter={StaticResource myConverter}, ConverterParameter=Amount}" GroupAggregate="Sum" Width="100"/>

In the above XAML instead of binding it to a object variable, I bound it to the row and then call my converter passing the string name of the column I am interested in.

   1:   public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
   2:   {
   3:          Person p = value as Person;
   4:          if (p.Amount < 0 && p.Name.Equals("Kiran"))
   5:             return p.Amount + p.Amount * p.Bonus;
   6:          else
   7:             return p.Amount;
   8:          return value;
   9:   }

In the above code as you can see, first thing I do, is to unbox the object to the class and in here it is ‘Person’ class. Once you do that, from there you have access to all the properties in the class for you in the Convert method.  In the above code, as you can see, if the name is “Kiran” then my salary would salary + bonus other wise just salary.


Post a Comment