2009-02-03 3 views
3

У меня есть три вложенных класса: Show, Season и Episode, где у шоу есть сезоны, а времена года - эпизоды.Как связать вложенные объекты или привязку master-detail-binding в коде?

Я хочу связать два списка, чтобы первый список сезонов, а второй список эпизодов в этом сезоне.

Как я могу это сделать? Я предпочитаю, чтобы установить это в коде, а не XAML, но если вы знаете, как сделать это с XAML, это лучше, чем ничего ..

simplifyed XAML:

<Window> 
    <Label name="Showname" /> 
    <ListBox name="Seasons" /> 
    <ListBox name="Episodes" /> 
</Window> 

и некоторые соответствующий код:

public partial class Window1 : Window 
{ 
    public Data.Show show { get; set; } 
    public Window1() 
    { 
    this.DataContex = show; 

    //Bind shows name to label 
    Binding bindName = new Binding("Name"); 
    ShowName.SetBinding(Label.ContentProperty, bindName); 

    //Bind shows seasons to first listbox 
    Binding bindSeasons = new Binding("Seasons"); 
    Seasons.SetBinding(ListBox.ItemsSourceProperty, bindSeasons); 
    Seasons.DisplayMemberPath = "SeasonNumber"; 
    Seasons.IsSyncronizedWithCurrentItem = true; 

    //Bind current seasons episodes to second listbox 
    Binding bindEpisodes = new Binding("?????"); 
    Episodes.SetBinding(ListBox.ItemsSourceProperty, bindEpisodes); 
    Episodes.DisplayMemberPath = "EpisodeTitle"; 
    } 
} 

У кого-нибудь есть подсказки, как связать второй список?

ответ

8

Редактировать: добавляет немного больше деталей.

Хорошо, допустим, у вас есть объект «Показать». У этого есть коллекция Сезонов. В каждом сезоне есть коллекция эпизодов. Затем вы можете предоставить DataContext для всего элемента управления объектом Show.

  • Привяжите свой TextBlock к имени шоу. Text = "{Binding Name"}
  • Связать с товаром Источники времени года список окна коллекции Времена года. ItemsSource = «{Binding} Времена года» IsSynchronizedWithCurrentItem = «True»
  • Свяжите ItemsSource эпизодов окна списка для сбора Эпизодов текущего сезона. ItemsSource = "{Binding Seasons/Episodes}".

Предполагая DataContext вашего окна является Показать объект, XAML будет:

<Window> 
    <TextBlock Text="{Binding Name}" /> 
    <ListBox ItemsSource="{Binding Seasons}" IsSynchronizedWithCurrentItem="True" /> 
    <ListBox ItemsSource="{Binding Seasons/Episodes}" /> 
</Window> 

Так что ваши элементы пользовательского интерфейса на самом деле не нужны имена. Кроме того, перевести это в код довольно легко, и вы оказались на правильном пути. Основная проблема с вашим кодом заключалась в том, что вы назвали списки, когда они действительно не нужны.

Предполагая, что объект Season имеет свойство Эпизоды, который представляет собой совокупность объектов Episode, я думаю, что это:

Binding bindEpisodes = new Binding("Seasons/Episodes"); 
+0

Человек, который был быстро! И просто, и правильно. Спасибо! – Vegar

 Смежные вопросы

  • Нет связанных вопросов^_^