방법: 바인딩된 항목 목록을 기반으로 값 산출
MultiBinding을 사용하면 바인딩 대상 속성을 원본 속성 목록에 바인딩한 다음 논리를 적용하여 지정된 입력 값을 생성할 수 있습니다. 이 예제는 MultiBinding을 사용하는 방법을 보여 줍니다.
예제
다음 예제에서 NameListData
은 firstName
과 lastName
두 개의 속성을 포함하는 PersonName
개체의 컬렉션을 참조합니다. 다음 예제는 사람의 성과 이름을 보여 주는(성 먼저 표시) 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>
성이 먼저 표시되는 형식이 생성되는 방법을 이해하기 위해 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
는 IMultiValueConverter 인터페이스를 구현합니다. NameConverter
은 개별 바인딩에서 값을 가져오고 값 개체 배열에 저장합니다. MultiBinding 요소 아래 Binding 요소가 표시되는 순서는 배열에 이러한 값이 저장되는 순서입니다. ConverterParameter 특성의 값은 Converter 메서드의 매개 변수 인수에 의해 참조됩니다. 이 메서드는 이 매개 변수에서 전환을 수행하여 이름의 형식을 지정하는 방법을 결정합니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET Desktop feedback