2010-12-22 14 views
12
<TextBlock Text="{Binding Path=[0]} /> 

oderwpf binden an Indexer

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

funktioniert gut. Aber gibt es eine Möglichkeit, eine Variable als Indexer-Schlüssel zu übergeben?

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

MSDN-Link für zukünftige Forscher: http://msdn.microsoft.com/en-us/library/ms742451.aspx – yzorg

+0

Überprüfen Sie meine Antwort auf diesen Link http://stackoverflow.com/q/ 4385693/217880 – biju

Antwort

0

Dies erfordert eine IValueConverter IMultiValueConverter.

+1

Wirklich? Können Sie beschreiben, wie Sie dies mit einem Wertkonverter tun würden? – ColinE

0

Nein, ich fürchte nicht. An dieser Stelle sollten Sie möglicherweise ein Ansichtsmodell erstellen, das Ihre Daten so formatiert, dass sie leichter an sie gebunden werden können.

12

Der schnellste Weg, dies zu umgehen ist in der Regel ein Multibinding mit einem IMultiValueConverter zu verwenden, die die Sammlung und den Index für seine Bindungen akzeptiert:

Der Konverter

<TextBlock.Text> 
    <MultiBinding Converter="{StaticResource ListIndexToValueConverter}"> 
     <Binding /> <!-- assuming the collection is the DataContext --> 
     <Binding Path="Column.Index"/> 
    </MultiBinding> 
</TextBlock.Text> 
kann die Lookup dann tun, basierend auf den beiden Werten wie dies:

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]]; 
} 
Verwandte Themen