Click to Rate and Give Feedback
MSDN
MSDN Library
Web Development
Silverlight
Silverlight 2

  Switch on low bandwidth view
This page is specific to
Microsoft Silverlight 2

Other versions are also available for the following:
.NET Framework Class Library for Silverlight
IValueConverter Interface

Exposes methods that allow modifying the data as it passes through the binding engine.

Namespace:  System.Windows.Data
Assembly:  System.Windows (in System.Windows.dll)
Visual Basic (Declaration)
Public Interface IValueConverter
Visual Basic (Usage)
Dim instance As IValueConverter
C#
public interface IValueConverter

You can create a class that allows you to convert the format of your data between the source and the target by inheriting from IValueConverter. For example, you might want have a list of colors that you store as RGBA values but display them with color names in the UI. By implementing Convert and ConvertBack, you can change the format of the data values as they are passed between the target and source by the binding engine.

The following example shows how to implement the IValueConverter interface and use the converter when data binding to a collection of object.

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.Resources>
       <local:DateFormatter x:Key="FormatConverter" />
    </Grid.Resources>

    <ComboBox Height="60" Width="200" x:Name="MusicCombo" 
        ItemsSource="{Binding}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=OneWay}" />
                    <TextBlock Text="{Binding Path=Artist, Mode=OneWay}" />
                    <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                    Converter={StaticResource FormatConverter}, 
                    ConverterParameter=\{0:d\}}" />
               </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
</Grid>

C#
using System.Collections.ObjectModel;
using System.Windows.Data;


...


public partial class Page : UserControl
{

    public ObservableCollection<Recording> MyMusic =
        new ObservableCollection<Recording>();
    public Page()
    {
        InitializeComponent();

        // Add items to the collection.
        MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",
            new DateTime(2008, 2, 5)));
        MyMusic.Add(new Recording("Luka Abrus",
            "The Road to Redmond", new DateTime(2007, 4, 3)));
        MyMusic.Add(new Recording("Jim Hance",
            "The Best of Jim Hance", new DateTime(2007, 2, 6)));

        // Set the data context for the combo box.
        MusicCombo.DataContext = MyMusic;
    }
}

// Simple business object.
public class Recording
{
    public Recording() { }
    public Recording(string artistName, string cdName, DateTime release)
    {
        Artist = artistName;
        Name = cdName;
        ReleaseDate = release;
    }
    public string Artist { get; set; }
    public string Name { get; set; }
    public DateTime ReleaseDate { get; set; }
}

public class DateFormatter : IValueConverter
{
    // This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        // Retrieve the format string and use it to format the value.
        string formatString = parameter as string;
        if (!string.IsNullOrEmpty(formatString))
        {
            return string.Format(culture, formatString, value);

        }
        // If the format string is null or empty, simply call ToString()
        // on the value.
        return value.ToString();
    }

    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Page view tracker