次の方法で共有


方法 : バインドされたデータを変換する

更新 : 2007 年 11 月

この例では、バインディングで使用するデータに変換を適用する方法を示します。

バインディング中にデータを変換するには、IValueConverter インターフェイスを実装するクラスを作成する必要があります。このインターフェイスには、Convert メソッドや ConvertBack メソッドなどが用意されています。

使用例

渡された日付の値を変換し、年、月、日だけを表示する日付コンバータの実装を次の例に示します。IValueConverter インターフェイスを実装する際、次の例のように、実装を ValueConversionAttribute 属性で修飾し、変換に関連するデータ型を開発ツールに示すことをお勧めします。

[ValueConversion(typeof(DateTime), typeof(String))]
public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        return date.ToShortDateString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = value.ToString();
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime))
        {
            return resultDateTime;
        }
        return value;
    }
}

コンバータを作成したら、Extensible Application Markup Language (XAML) ファイル内でリソースとしてそのコンバータを追加できます。次の例では、DateConverter が定義される名前空間に src を割り当てます。

<src:DateConverter x:Key="dateConverter"/>

最後に、次の構文を使用して、このコンバータをバインディングで使用できます。次の例では、TextBlock のテキスト コンテンツは、外部データ ソースのプロパティである StartDate にバインドされています。

<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,8,0"
           Name="startDateTitle"
           Style="{StaticResource smallTitleStyle}">Start Date:</TextBlock>
<TextBlock Name="StartDateDTKey" Grid.Row="2" Grid.Column="1" 
    Text="{Binding Path=StartDate, Converter={StaticResource dateConverter}}" 
    Style="{StaticResource textStyleTextBlock}"/>

上の例で参照したスタイル リソースは、ここでは示していないサンプルのリソース セクションで定義されます。上のコード例を含むコード サンプル全体については、「データ バインディングのデモ」を参照してください。

参照

処理手順

方法 : バインディングの検証の実装

概念

データ バインディングの概要

その他の技術情報

データ バインディングのサンプル

データ バインディングに関する「方法」トピック