Практическое руководство. Создание значений на основе списка связанных элементов
MultiBinding позволяет привязать целевое свойство привязки к списку свойств источника и затем применить логику для получения значения с заданными входными данными. В этом примере демонстрируется использование MultiBinding.
Пример
В следующем примере NameListData
ссылается на коллекцию объектов PersonName
, которые являются объектами, содержащими два свойства, firstName
и lastName
. В следующем примере создается 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;
}
}
NameConverter
Реализует IMultiValueConverter интерфейс. NameConverter
принимает значения от отдельных привязок и сохраняет их в массиве объектов значений. Порядок, в котором Binding элементы отображаются в разделе MultiBinding соответствует порядку, в которой хранятся эти значения в массиве. Значение ConverterParameter атрибут ссылается аргумент параметра Converter метод, который переключается на параметр для определения формата имени.