方法 : バインドされたデータを変換する
更新 : 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}"/>
上の例で参照したスタイル リソースは、ここでは示していないサンプルのリソース セクションで定義されます。上のコード例を含むコード サンプル全体については、「データ バインディングのデモ」を参照してください。