Freigeben über


Gewusst wie: Erzeugen eines Werts auf Grundlage einer Liste gebundener Elemente

Mit MultiBinding können Sie eine Eigenschaft eines Bindungsziels an eine Liste von Quelleigenschaften binden und anschließend Logik anwenden, um einen Wert mit den angegebenen Eingaben zu erstellen. In diesem Beispiel wird die Verwendung von MultiBinding veranschaulicht.

Beispiel

Im folgenden Beispiel verweist 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 ein Wert für TextBlock erzeugt, der Vorname und Nachname einer Person anzeigt. Dabei wird der Nachname zuerst angezeigt.

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

Um zu verstehen, wie das Format erzeugt wird, in dem der Nachname zuerst angezeigt wird, betrachten Sie zunächst die Implementierung von 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 implementiert die IMultiValueConverter-Schnittstelle. NameConverter übernimmt die Werte aus den einzelnen Bindungen und speichert sie im Werteobjektarray. Die Reihenfolge, in der die Binding-Elemente unter dem MultiBinding-Element angezeigt werden, entspricht der Reihenfolge, in der diese Werte im Array gespeichert sind. Auf den Wert des ConverterParameter-Attributs wird vom Parameterargument der Converter-Methode verwiesen, die den Parameter umschaltet, um zu bestimmen, wie der Name formatiert wird.

Siehe auch

Aufgaben

Gewusst wie: Konvertieren von gebundenen Daten

Konzepte

Übersicht über Datenbindung

Weitere Ressourcen

Gewusst-wie-Themen zur Datenbindung