Condividi tramite


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

La classe MultiBinding consente di associare una proprietà di destinazione dell'associazione a un elenco di proprietà di origine e di applicare quindi una logica per produrre un valore con gli input specificati. In questo esempio viene mostrato come utilizzare la classe MultiBinding.

Esempio

Nell'esempio riportato di seguito, l'elemento NameListData fa riferimento a un insieme di oggetti PersonName, che contengono due proprietà, firstName e lastName. Nell'esempio seguente viene generato un oggetto TextBlock in cui sono mostrati, nell'ordine, il cognome e il nome di una persona.

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

Per comprendere il modo in cui viene generato il formato cognome-nome, è necessario esaminare l'implementazione di 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;
    }
}

L'oggetto NameConverter implementa l'interfaccia IMultiValueConverter. NameConverter accetta i valori delle singole associazioni e li archivia nella matrice di oggetti valori. L'ordine in cui gli elementi Binding vengono visualizzati nell'elemento MultiBinding corrisponde all'ordine in cui tali valori sono archiviati nella matrice. Per fare riferimento al valore dell'attributo ConverterParameter si utilizza l'argomento di parametro del metodo Converter, che esegue una modifica del parametro per determinare la modalità di formattazione del nome.

Vedere anche

Attività

Procedura: convertire i dati associati

Concetti

Cenni preliminari sull'associazione dati

Altre risorse

Procedure relative all'associazione dati