Enlace en WPF al elemento de conjunto especificado por propiedad

Digamos que tengo algunos TextBlocks en mi UI, algo así:

     

y en mi código detrás tengo algo como esto:

 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; } } 

Los dos primeros TextBlocks se muestran bien para mí, mostrando 2 y ‘cake’ respectivamente. El tercero no logra lo que me gustaría, es decir, utilizar la propiedad DessertIndex para indexar en ese conjunto y también mostrar ‘torta’. Hice un poco de búsqueda aquí en SO para una pregunta similar, pero no encontré ninguna. En última instancia, no quiero especificar valores como 2 en mi archivo .xaml y me gustaría basarme en una propiedad para indexarla en esa matriz. es posible? Si es así, ¿qué estoy haciendo mal aquí?


EDITAR:

Entonces, lo que más aprecio es una situación en la que los datos son una Lista de estos objetos [] y estoy usando el StackPanel anterior como parte de un DataTemplate para un ListBox. Así que la idea, como Mark Heath sugiere a continuación, de usar una propiedad que desreferencia la matriz no parece funcionar como yo quisiera. Ideas?

Otra alternativa es usar MultiBinding con un convertidor:

                  

Luego, en el código subyacente, el convertidor se define de la siguiente manera:

 namespace WpfApplication1 { public class FoodIndexConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (values == null || values.Length != 2) return null; int? idx = values[0] as int?; object[] food = values[1] as object[]; if (!idx.HasValue || food == null) return null; return food[idx.Value]; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } } 

Si se DesertIndex la molestia de tener una propiedad DesertIndex en su DataContext, ¿por qué no una propiedad que desreferencia la matriz de alimentos con DesertIndex:

 public object SelectedFood { get { return Food[DessertIndex]; } } public int DessertIndex { get { return 2; } } public object[] Food { get { return new object[]{"liver", "spam", "cake", "garlic" }; } } 

entonces puedes enlazar directamente a eso:

  

Este es esencialmente el enfoque “MVVM”: hacer que el objeto de contexto de datos tenga las propiedades que son adecuadas para el enlace.