Partager via


Comment : produire une valeur en fonction d'une liste d'éléments liés

MultiBinding vous permet de lier une propriété cible de liaison à une liste de propriétés source, puis d'appliquer une logique pour produire une valeur à l'aide des entrées fournies. Cet exemple montre comment utiliser MultiBinding.

Exemple

Dans l'exemple suivant, NameListData fait référence à une collection d'objets PersonName, qui contiennent deux propriétés, firstName et lastName. L'exemple suivant produit un TextBlock qui affiche le nom et le prénom d'une personne, en commençant par le nom.

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

Pour comprendre comment est réalisé le format nom-prénom, observons l'implémentation de 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 implémente l'interface IMultiValueConverter. NameConverter prend les valeurs des liaisons individuelles et les stocke dans le tableau d'objets de valeurs. L'ordre dans lequel les éléments Binding apparaissent sous l'élément MultiBinding est l'ordre de placement des valeurs dans le tableau. La valeur de l'attribut ConverterParameter est référencée par l'argument de paramètre de la méthode Converter, qui bascule le paramètre pour déterminer comment formater le nom.

Voir aussi

Tâches

Comment : convertir des données liées

Concepts

Vue d'ensemble de la liaison de données

Autres ressources

Rubriques "Comment" relatives aux liaisons de données