Связывание в WPF с элементом массива, заданным свойством

Скажем, у меня есть некоторые текстовые блоки в моем пользовательском интерфейсе, что-то вроде этого:

     

и в моем коде позади у меня есть что-то вроде этого:

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

Первые два TextBlocks отображаются отлично для меня, отображая 2 и «cake» соответственно. Третий не выполняет то, что я хотел бы, а именно использовать свойство DessertIndex для индексации в этот массив, а также отображать «cake». Я немного искал здесь на SO для аналогичного вопроса, но не нашел его. В конечном счете, я не хочу указывать такие значения, как 2 в моем .xaml-файле, и хотел бы полагаться на свойство вместо этого для индексации в этот массив. Это возможно? Если да, то что я делаю неправильно здесь?


РЕДАКТИРОВАТЬ:

Так что я более тесно – это ситуация, когда данные являются списком этих объектов [], и я использую вышеуказанный StackPanel как часть DataTemplate для ListBox. Таким образом, идея, как предлагает Марк Хит, использовать свойство, которое разделяет массив, похоже, не работает так, как я бы хотел. Идеи?

Другой альтернативой является использование MultiBinding с конвертером:

                  

Затем в коде-коде конвертер определяется примерно так:

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

если вы DesertIndex с DesertIndex свойства DesertIndex в вашем DataContext, почему бы не свойство, которое разделяет массив Food с 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" }; } } 

то вы можете напрямую связать с этим:

  

Это по существу подход «MVVM»: сделать объект datacontext имеющими свойства, которые подходят для привязки.

  • Как правильно привязать xml к WPF DataGrid?
  • Есть ли способ определить, где объявляется / создается привязка WPF?
  • WPF привязка к локальной переменной
  • Связывание WPF ComboBox с пользовательским списком
  • Привязать к методу в WPF?
  • Каковы различные режимы привязки WPF?
  • Заполнить Combobox из базы данных
  • Как я могу привязать данные строк к ListBox в WPF / WP7?
  • Нажатие свойств GUI только для чтения обратно в ViewModel
  • Общий class наблюдаемого словаря для DataBinding / WPF C #
  • Можно ли связать свойство Canvas's Children в XAML?
  • Давайте будем гением компьютера.