Nasıl yapılır: Bağımlı Öğeler Listesine Göre Değer Üretme

MultiBinding , bir bağlama hedefi özelliğini kaynak özellikleri listesine bağlama ve ardından verilen girişlerle bir değer üretmek için mantık uygulamana olanak sağlar. Bu örnekte, 'nin nasıl kullanımı MultiBinding gösterildi.

Örnek

Aşağıdaki örnekte, NameListData ve olmak için iki özellik PersonName içeren nesneler koleksiyonuna firstNamelastName başvurur. Aşağıdaki örnek, soyadı TextBlock ilk olarak bir kişinin adını ve soyadını gösteren bir üretir.

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

Soyadı-adı-adı biçiminin nasıl üretil olduğunu anlamak için uygulamasının bir göz NameConverter atabilirsiniz:

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 arabirimini IMultiValueConverter uygulama. NameConverter tek tek bağlamalardan değerleri alır ve değerler nesne dizisinde depolar. Öğelerin Binding öğenin altında görünme MultiBinding sırası, bu değerlerin dizide depolandığı sıradır. özniteliğinin değerine yönteminin parametre bağımsız değişkeni tarafından başvurur ve bu bağımsız değişken, adı biçimlendirmeyi ConverterParameterConverter belirlemek için parametresinde bir anahtar gerçekleştirir.

Ayrıca bkz.