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 sources, puis d’appliquer une logique pour produire une valeur avec les entrées données. Cet exemple montre comment utiliser MultiBinding.
Exemple
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
. L’exemple suivant produit un TextBlock qui affiche les prénoms et noms d’une personne portant le prénom du nom.
<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
:
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
prend les valeurs des liaisons individuelles et les stocke dans le tableau d’objets de valeurs. L’ordre dans lequel les Binding éléments apparaissent sous l’élément MultiBinding est l’ordre dans lequel ces valeurs sont stockées dans le tableau. La valeur de l’attribut ConverterParameter est référencée par l’argument de paramètre de la Converter méthode, qui effectue un commutateur sur le paramètre pour déterminer comment mettre en forme le nom.
Voir aussi
.NET Desktop feedback