Reputation: 151
<TextBlock Text="{Binding Path=[0]} />
or
<TextBlock Text="{Binding Path=[myKey]} />
works fine. But is there a way to pass a variable as indexer key?
<TextBlock Text="{Binding Path=[{Binding Column.Index}]} />
Upvotes: 14
Views: 8489
Reputation: 24453
The quickest way to handle this is usually to use a MultiBinding with an IMultiValueConverter that accepts the collection and the index for its bindings:
<TextBlock.Text>
<MultiBinding Converter="{StaticResource ListIndexToValueConverter}">
<Binding /> <!-- assuming the collection is the DataContext -->
<Binding Path="Column.Index"/>
</MultiBinding>
</TextBlock.Text>
The converter can then do the lookup based on the two values like this:
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]];
}
Upvotes: 13
Reputation: 70142
No, I'm afraid not. At this point you should probably consider creating a view model that shapes your data to make it easier to bind to it.
Upvotes: -1