wpf привязка к индексатору - PullRequest
14 голосов
/ 22 декабря 2010
<TextBlock Text="{Binding Path=[0]} />

или

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

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

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

Ответы [ 3 ]

13 голосов
/ 22 декабря 2010

Самый быстрый способ справиться с этим, как правило, заключается в использовании 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]];
}
0 голосов
/ 22 декабря 2010

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

0 голосов
/ 22 декабря 2010

Это требует IValueConverter IMultiValueConverter.

...