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