Wpf привязывается к индексу

<TextBlock Text="{Binding Path=[0]} />

или

<TextBlock Text="{Binding Path=[myKey]} />

работает отлично. Но есть ли способ передать переменную в качестве ключа индексатора?

<TextBlock Text="{Binding Path=[{Binding Column.Index}]} />

Ответы

Ответ 1

Самый быстрый способ справиться с этим - обычно использовать MultiBinding с IMultiValueConverter, который принимает коллекцию и индекс для привязок:

<TextBlock.Text>
    <MultiBinding Converter="{StaticResource ListIndexToValueConverter}">
        <Binding /> <!-- assuming the collection is the DataContext -->
        <Binding Path="Column.Index"/>
    </MultiBinding>
</TextBlock.Text>

Затем конвертер может выполнять поиск на основе двух значений, таких как:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values.Length < 2)
        return Binding.DoNothing;

    IList list = values[0] as IList;
    if (list == null || values[1] == null || !(values[1] is int))
        return Binding.DoNothing;

    return list[(int)values[1]];
}

Ответ 2

Это вызывает IValueConverter IMultiValueConverter.

Ответ 3

Нет, я боюсь, что нет. На этом этапе вам, вероятно, следует подумать о создании модели представления, которая формирует ваши данные, чтобы упростить привязку к ней.