Show / Hide Table of Contents

Практическое руководство. Создание значений на основе списка связанных элементов

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 метод, который переключается на параметр для определения формата имени.

См. также

  • Преобразование привязанных данных
  • Общие сведения о привязке данных
  • Практические руководства
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX