Freigeben über


Vorgehensweise: Erstellen eines Werts basierend auf einer Liste gebundener Elemente

mit MultiBinding können Sie eine Bindungszieleigenschaft an eine Liste der Quelleigenschaften binden und dann Logik anwenden, um einen Wert mit den angegebenen Eingaben zu erzeugen. In diesem Beispiel wird die Verwendung von MultiBindingveranschaulicht.

Beispiel

Im folgenden Beispiel bezieht sich NameListData auf eine Auflistung von PersonName Objekten, bei denen es sich um Objekte handelt, die zwei Eigenschaften enthalten, firstName und lastName. Im folgenden Beispiel wird eine TextBlock erzeugt, die die Nachnamen und Vornamen einer Person mit dem Nachnamen zuerst anzeigt.

<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>

Um zu verstehen, wie das Nachname-zuerst-Format erstellt wird, lassen Sie uns die Implementierung des NameConverteransehen.

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 implementiert die IMultiValueConverter-Schnittstelle. NameConverter übernimmt die Werte aus den einzelnen Verknüpfungen und speichert sie in dem Werteobjekt-Array. Die Reihenfolge, in der die Binding Elemente unter dem MultiBinding Element angezeigt werden, ist die Reihenfolge, in der diese Werte im Array gespeichert werden. Auf den Wert des Attributs ConverterParameter wird durch das Parameterargument der Converter-Methode verwiesen, die eine Umschaltung anhand des Parameters durchführt, um zu bestimmen, wie der Name formatiert werden soll.

Siehe auch