다음을 통해 공유


방법: 바인딩된 항목 목록을 기반으로 값 산출

MultiBinding을 사용하여 바인딩 대상을 속성을 소스 속성 목록에 바인딩한 다음 제공된 입력을 사용하여 값을 산출하는 논리를 적용할 수 있습니다. 이 예제에서는 MultiBinding을 사용하는 방법을 보여 줍니다.

예제

다음 예제에서 NameListData는 두 개의 속성, firstName과 lastName을 포함하는 개체인 PersonName 개체의 컬렉션을 참조합니다. 다음 예제에서는 개인의 성과 이름을 표시할 때 성을 먼저 표시하는 TextBlock을 만듭니다.

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

성이 먼저 오는 형식을 만드는 방법을 이해하려면 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;
    }
}

NameConverter는 IMultiValueConverter 인터페이스를 구현합니다. NameConverter는 개별 바인딩의 값을 사용하여 해당 값을 값 개체 배열에 저장합니다. Binding 요소가 MultiBinding 요소 아래에 표시되는 순서는 해당 값이 배열에 저장되는 순서입니다. ConverterParameter 특성의 값은 Converter 메서드의 매개 변수 인수에 의해 참조됩니다. 이 메서드는 매개 변수로 전환하여 이름의 서식을 지정하는 방식을 결정합니다.

참고 항목

작업

방법: 바인딩된 데이터 변환

개념

데이터 바인딩 개요

기타 리소스

데이터 바인딩 방법 항목