Say ho un po 'TextBlocks sul mio UI, qualcosa in questo modo:Legatura in WPF all'elemento di matrice specificato dal proprietà
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding DessertIndex}" />
<TextBlock Text="{Binding Food[2]}" />
<TextBlock Text="{Binding Food[{Binding DessertIndex}]}" />
</StackPanel>
e nel mio codice dietro Ho qualcosa di simile:
public partial class MainWindow : Window
{
public int DessertIndex
{
get { return 2; }
}
public object[] Food
{
get
{
return new object[]{"liver", "spam", "cake", "garlic" };
}
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
}
I primi due blocchi di testo vengono visualizzati correttamente, visualizzando rispettivamente 2 e "torta". Il terzo non realizza ciò che mi piacerebbe, vale a dire utilizzare la proprietà DessertIndex per indicizzare in quell'array e visualizzare anche "torta". Ho fatto un po 'di ricerche qui su SO per una domanda simile ma non l'ho trovata. In definitiva, non voglio specificare valori come 2 nel mio file .xaml e vorrei fare affidamento su una proprietà invece per l'indicizzazione in quell'array. È possibile? Se sì, cosa sto sbagliando qui?
EDIT:
Quindi quello che più da vicino ho è una situazione in cui i dati sono un elenco di questi oggetti [] e sto usando il sopra StackPanel come parte di un DataTemplate per un ListBox. Quindi l'idea, come suggerisce Mark Heath in basso, di usare una proprietà che dereferenze alla matrice non sembra funzionare come vorrei. Idee?
Grazie Colin - questo funziona molto bene per la mia app di prova e sospetto che funzionerà altrettanto bene nella realtà. E 'stata una buona giornata - ho imparato qualcosa di veramente interessante da parte tua. :) – itsmatt
Potresti essere tentato di provare qualcosa di diverso usando un ConverterParameter per evitare la multibinding. Sfortunatamente, questo non porterà da nessuna parte, in quanto ConverterParameter non può utilizzare un'associazione poiché non è una proprietà Dependency ed è necessario utilizzare MultiBinding –