Dela via


Anvisningar: Skapa ett värde baserat på en lista över bundna objekt

MultiBinding kan du binda en bindningsmålegenskap till en lista med källegenskaper och sedan använda logik för att skapa ett värde med angivna indata. Det här exemplet visar hur du använder MultiBinding.

Exempel

I följande exempel refererar NameListData till en samling PersonName objekt, som är objekt som innehåller två egenskaper, firstName och lastName. I följande exempel skapas en TextBlock som visar för- och efternamn för en person med efternamnet först.

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

Vi tar en titt på implementeringen av NameConverterför att förstå hur formatet för efternamn och förnamn skapas:

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 implementerar IMultiValueConverter-gränssnittet. NameConverter tar värdena från de enskilda bindningarna och lagrar dem i objektmatrisen för värden. Den ordning i vilken Binding element visas under elementet MultiBinding är den ordning i vilken dessa värden lagras i matrisen. Värdet för attributet ConverterParameter refereras av parameterargumentet för metoden Converter, som utför en växel på parametern för att fastställa hur namnet ska formateras.

Se även