Aracılığıyla paylaş


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

MultiBinding bir bağlama hedef özelliğini kaynak özellikler listesine bağlamanıza ve ardından verilen girişlerle bir değer üretmek için mantık uygulamanıza olanak tanır. Bu örnekte nasıl kullanılacağı MultiBindinggösterilmektedir.

Örnek

Aşağıdaki örnekte, NameListData ve olmak üzere iki özellik firstNamelastNameiçeren nesneler olan bir nesne koleksiyonuna PersonName başvurur. Aşağıdaki örnek, soyadı adlarıyla bir kişinin adını ve soyadını gösteren bir oluşturur TextBlock .

<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ı biçiminin nasıl üretildiğini anlamak için uygulamasını inceleyelim 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 arabirimini IMultiValueConverter uygular. NameConverter tek tek bağlamalardaki değerleri alır ve bunları values nesne dizisinde depolar. Öğelerin öğesinin Binding altında MultiBinding görünme sırası, bu değerlerin dizide depolandığı sıradır. özniteliğinin ConverterParameter değerine, adın nasıl biçimlendirileceğini belirlemek için parametresinde bir anahtar gerçekleştiren yönteminin parametre bağımsız değişkeni Converter tarafından başvurulur.

Ayrıca bkz.