方法 : バインドされた項目の一覧に基づいて値を生成する

更新 : 2007 年 11 月

MultiBinding を使用すると、ソース プロパティの一覧にバインディング ターゲット プロパティをバインドし、指定した入力で値を生成するロジックを適用することができます。この例では、MultiBinding を使用する方法を示します。

使用例

次の例では、NameListData は、PersonName オブジェクトのコレクションを参照します。このオブジェクトは、firstName と lastName の 2 つのプロパティを含みます。個人の氏名を姓から表示する TextBlock を生成する例を次に示します。

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample"
  x:Class="SDKSample.Window1"
  Width="400"
  Height="280"
  Title="MultiBinding Sample">
    
  <Window.Resources>
    <c:NameList x:Key="NameListData"/>
    <c:NameConverter x:Key="myNameConverter"/>


...


</Window.Resources>


...


<TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myNameConverter}"
                  ConverterParameter="FormatLastFirst">
      <Binding Path="FirstName"/>
      <Binding Path="LastName"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>


...


</Window>

姓が先の形式を生成する方法を理解するには、次に示す NameConverter の実装を参照してください。

Public Class NameConverter
    Implements IMultiValueConverter

Public Function Convert1(ByVal values() As Object, _
                         ByVal targetType As System.Type, _
                         ByVal parameter As Object, _
                         ByVal culture As System.Globalization.CultureInfo) As Object _
                         Implements System.Windows.Data.IMultiValueConverter.Convert
    Select Case CStr(parameter)
        Case "FormatLastFirst"
            Return (values(1) & ", " & values(0))
    End Select
    Return (values(0) & " " & values(1))
End Function

Public Function ConvertBack1(ByVal value As Object, _
                             ByVal targetTypes() As System.Type, _
                             ByVal parameter As Object, _
                             ByVal culture As System.Globalization.CultureInfo) As Object() _
                             Implements System.Windows.Data.IMultiValueConverter.ConvertBack
    Return CStr(value).Split(New Char() {" "c})
End Function
End Class
public class NameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string name;

        switch ((string)parameter)
        {
            case "FormatLastFirst":
                name = values[1] + ", " + values[0];
                break;
            case "FormatNormal":
            default:
                name = values[0] + " " + values[1];
                break;
        }

        return name;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        string[] splitValues = ((string)value).Split(' ');
        return splitValues;
    }
}

NameConverter は IMultiValueConverter インターフェイスを実装します。NameConverter は、個々のバインディングから値を受け取り、その値を値のオブジェクト配列に格納します。Binding 要素が MultiBinding 要素の下に出現する順序は、値が配列内に格納されている順序です。ConverterParameter 属性の値は、名前の形式を決定するパラメータの切り替えを実行する Converter メソッドのパラメータ引数によって参照されます。

サンプル全体については、「パラメータ化された MultiBinding の実装のサンプル」を参照してください。

IMultiValueConverter の実装の別の例については、「データ バインディングのデモ」を参照してください。

参照

処理手順

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

概念

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

その他の技術情報

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

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