by
kirupa | 29 July 2007
In the previous page,
you tested our data binding and realized it didn't work. The solution that you
embarked upon was creating a value converter. You created the C# class, but we
haven't done anything more beyond that. Let's change that and add our value
converter code.
Right now, in Visual Studio / C# Express, you will
see the following code in our
StringToBrush.cs
file:
- using
System;
- using
System.Collections.Generic;
- using
System.Text;
-
- namespace
KulerBackground
- {
- class
StringToBrush
- {
- }
- }
To make our StringToBrush class be a value
converter, it needs to implement the
IValueConverter
interface. You can do that by using what looks like
the syntax for extending a class:
- using
System;
- using
System.Collections.Generic;
- using
System.Text;
-
- namespace
KulerBackground
- {
- class
StringToBrush
:
IValueConverter
- {
- }
- }
When you add the : IValueConverter text, you will
see that you aren't in the clear yet. You have to
specify which IValueConverter to use. When you right
click on IValueConverter, the Resolve menu will
appear, and from that menu, select
System.Windows.Data:
[ resolve the ambiguity by using the
System.Windows.Data namespace ]
After you have selected the System.Windows.Data
namespace, you will see that you still have yet
another thing to take care of - actually
implementing the interface. Right click on your
IValueConverter text and, from the menu that
appears again, go to Implement
Interface | Implement Interface:
[ implement the interface through the same context
menu ]
Once you have selected the Implement Interface
item from the above menu, the methods (and
signatures) a class implementing this interface
requires will appear in your code editor:
- using
System;
- using
System.Collections.Generic;
- using
System.Text;
- using
System.Windows.Data;
-
- namespace
KulerBackground
- {
- class
StringToBrush
:
IValueConverter
- {
- #region
IValueConverter
Members
-
- public
object
Convert(object
value,
Type
targetType,
object
parameter,
System.Globalization.CultureInfo
culture)
- {
- throw
new
Exception("The
method or operation is not
implemented.");
- }
-
- public
object
ConvertBack(object
value,
Type
targetType,
object
parameter,
System.Globalization.CultureInfo
culture)
- {
- throw
new
Exception("The
method or operation is not
implemented.");
- }
-
- #endregion
- }
- }
More specifically, using the IValueConverter
interface requires your implementing class to have a
Convert and
ConvertBack method
that takes the appropriate type and number of
arguments. We'll primarily deal with the Convert
method, so let's work on that for a bit.
Inside your Convert method, replace the
throw new Exception
line with the following code:
- if
(value
!=
null)
- {
- string
input
=
value.ToString();
-
- if
(input.Length
!=
6)
- {
- throw
new
Exception("String
doesn't seem to be a valid RGB hex
color");
- }
-
- Color
newColor
=
(Color)ColorConverter.ConvertFromString("#"
+
input);
-
- SolidColorBrush
colorBrush
=
new
SolidColorBrush(newColor);
- return
colorBrush;
- }
- else
- {
- return
new
SolidColorBrush(Colors.White);
- }
After overwriting the exception line in your
Convert method with the above code, be sure to
resolve your SolidColorBrush namespace. When you
build your project in Visual Studio / C# Express,
you should not receive any errors. We are almost
done, but there are a few things still left to do.
Don't worry if you do not fully understand what
the above pasted code does. I will go through the
code line-by-line towards the end of this tutorial
so that you have a good understanding of why things
work the way they do. In the meantime, let's move on
to the
next page and use our newly created value
converter with our data binding.
Onwards to the
next page!
|