方法: バインドされた項目のリストに基づいて値を生成する
MultiBinding では、バインディング ターゲット プロパティをソース プロパティの一覧にバインドし、ロジックを適用して、指定された入力で値を生成できます。 この例では、MultiBindingの使用方法を示します。
例
次の例では、NameListData
は、firstName
と lastName
の 2 つのプロパティを含むオブジェクトである、PersonName
オブジェクトのコレクションを参照します。 次の例では、個人の姓名を姓から先に表示する TextBlock が生成されます。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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 : 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;
}
}
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
NameConverter
は、IMultiValueConverter インターフェイスを実装します。 NameConverter
は、個々のバインディングから値を受け取り、値オブジェクト配列に格納します。 Binding 要素が MultiBinding 要素の下に表示される順序は、それらの値が配列に格納される順序です。 ConverterParameter 属性の値は、Converter メソッドのパラメーター引数によって参照されます。このメソッドは、パラメーターの切り替えを実行して名前の書式設定方法を決定します。
関連項目
- バインドされたデータ を変換する
- データ バインディングの概要
- 使い方ガイドトピック
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET Desktop feedback