Say J'ai quelques TextBlocks sur mon interface utilisateur, quelque chose comme ceci:de liaison dans WPF à l'élément de tableau spécifié par la propriété
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding DessertIndex}" />
<TextBlock Text="{Binding Food[2]}" />
<TextBlock Text="{Binding Food[{Binding DessertIndex}]}" />
</StackPanel>
et dans mon code derrière j'ai quelque chose comme ceci:
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;
}
}
Les deux premiers TextBlocks s'affichent très bien pour moi, affichant respectivement 2 et 'cake'. Le troisième n'accomplit pas ce que je veux, à savoir utiliser la propriété DessertIndex pour indexer dans ce tableau et afficher 'cake'. J'ai fait un peu de recherche ici sur SO pour une question similaire mais je n'en ai pas trouvé. En fin de compte, je ne veux pas spécifier des valeurs comme 2 dans mon fichier .xaml et je voudrais me fier à une propriété pour l'indexer dans ce tableau. Est-ce possible? Si oui, qu'est-ce que je fais mal ici?
EDIT:
Alors ce que j'ai plus près est une situation où les données sont une liste de ces objets [] et je l'utilise ci-dessus StackPanel dans le cadre d'un DataTemplate pour une ListBox. Donc, l'idée, comme Mark Heath suggère ci-dessous, d'utiliser une propriété qui déréférence le tableau ne semble pas fonctionner comme je le voudrais. Des idées?
Merci Colin - cela fonctionne très bien pour mon application de test et je suppose que ça va marcher aussi bien dans la réalité. Ça a été une bonne journée - j'ai appris quelque chose de vraiment cool de ta part. :) – itsmatt
Vous pourriez être tenté d'essayer quelque chose de différent en utilisant un ConverterParameter pour éviter la multi-liaison. Malheureusement, cela ne mènera nulle part, car ConverterParameter ne peut pas utiliser une liaison car ce n'est pas un DependencyProperty, et vous devez utiliser MultiBinding –