Comment : produire une valeur en fonction d'une liste d'éléments liésHow to: Produce a Value Based on a List of Bound Items

MultiBinding vous permet de lier une propriété de cible de liaison à une liste de propriétés sources, puis d’appliquer une logique pour produire une valeur avec les entrées données.MultiBinding allows you to bind a binding target property to a list of source properties and then apply logic to produce a value with the given inputs. Cet exemple montre comment utiliser MultiBinding.This example demonstrates how to use MultiBinding.

ExempleExample

Dans l’exemple suivant, NameListData fait référence à une collection d’objets PersonName, qui sont des objets contenant deux propriétés, firstName et lastName.In the following example, NameListData refers to a collection of PersonName objects, which are objects that contain two properties, firstName and lastName. L’exemple suivant produit une TextBlock qui affiche le prénom et le nom d’une personne avec le nom de famille en premier.The following example produces a TextBlock that shows the first and last names of a person with the last name first.

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

Pour comprendre comment est généré le format nom-prénom, jetons un œil à l’implémentation du NameConverter :To understand how the last-name-first format is produced, let's take a look at the implementation of the 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 implémente l'interface IMultiValueConverter.NameConverter implements the IMultiValueConverter interface. NameConverter prend les valeurs des liaisons individuelles et les stocke dans le tableau d’objets de valeurs.NameConverter takes the values from the individual bindings and stores them in the values object array. L’ordre dans lequel les éléments de Binding apparaissent sous l’élément MultiBinding est l’ordre dans lequel ces valeurs sont stockées dans le tableau.The order in which the Binding elements appear under the MultiBinding element is the order in which those values are stored in the array. La valeur de l’attribut ConverterParameter est référencée par l’argument de paramètre de la méthode Converter, qui exécute un commutateur sur le paramètre pour déterminer comment mettre en forme le nom.The value of the ConverterParameter attribute is referenced by the parameter argument of the Converter method, which performs a switch on the parameter to determine how to format the name.

Voir aussiSee also