Data Converstion and Task Addition with WPF - Converting Values, Continued
(Page 2 of 4 )
Now the converter for status is done, and it's time to move on to the converter for priority. The converter needs to convert the priority into an appropriate color name: red for high priority, orange for medium priority, and green for low priority. The process is exactly the same as before, only there's no need to be able to convert back (since there's no way to convert back from within the application-the color is static). Create a class named PriorityConverter:
namespace WpfToDo
{
class PriorityConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string rawPriority = ((string)value).ToLower();
if (rawPriority == "high")
{
return "Red";
}
else if (rawPriority == "medium")
{
return "Orange";
}
else
{
return "Green";
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
So, the application contains some two classes that were coded in, but that code now needs to be referenced in the XAML. Fortunately, however, the intermediate work involved in making this possible is very simple. First, the WpfToDo namespace, which contains the two classes, needs to be worked into the XAML. Place the following attribute in the Window tag:
xmlns:local="clr-namespace:WpfToDo"
You'll find several similar attributes already there. Place the new one right under them.
Next, instances of each of the classes need to be placed in the Resources section, just like the XmlDataProvider:
<Window.Resources>
...
<local:StatusConverter x:Key="statusConverter" />
<local:PriorityConverter x:Key="priorityConverter" />
...
</Window.Resources>
The final step is very simple. The binding needs to be set up, along with references to the two converters. Modify the existing tags, adding the appropriate attributes:
<CheckBox Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding XPath=Done, Converter={StaticResource statusConverter}}" />
<TextBlock Grid.Row="0" Grid.Column="1" FontWeight="Bold" Foreground="{Binding XPath=Priority, Converter={StaticResource priorityConverter}}" Text="{Binding XPath=Name}" />
The application now represents the data fully:

Next: Adding Tasks >>
More Windows Scripting Articles
More By Peyton McCullough