Condividi tramite


Procedura: Produrre un valore in base a un elenco di elementi associati

MultiBinding consente di associare una proprietà di destinazione di associazione a un elenco di proprietà di origine e quindi applicare la logica per produrre un valore con gli input specificati. In questo esempio viene illustrato come usare MultiBinding.

Esempio

Nell'esempio seguente, NameListData fa riferimento a una raccolta di oggetti PersonName, che sono oggetti che contengono due proprietà, firstName e lastName. Nell'esempio seguente viene generato un TextBlock che mostra il cognome e nome di una persona, con il cognome al primo posto.

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

Per comprendere il modo in cui viene prodotto il formato last-name-first, si esaminerà l'implementazione del 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 implementa l'interfaccia IMultiValueConverter. NameConverter accetta i valori delle singole associazioni di legame e li memorizza nella matrice di oggetti di valori. L'ordine in cui gli elementi Binding vengono visualizzati sotto l'elemento MultiBinding è l'ordine in cui tali valori vengono archiviati nella matrice. Il valore dell'attributo ConverterParameter viene fatto riferimento dall'argomento del parametro del metodo Converter, che esegue un'opzione sul parametro per determinare come formattare il nome.

Vedere anche