2009-02-03 64 views
3

我有三個嵌套類,Show,Season和Episode,一個節目有季節,季節有劇集。如何在代碼中綁定嵌套對象或主控細節綁定?

我想綁定兩個列表框,以便第一個列出季節,第二個列出該季節的情節。

我該怎麼做?我更喜歡在代碼,而不是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

編輯:添加更多的細節。

好吧,讓我們假設你有一個Show對象。這有一個季節的集合。每季都有一集情節。然後您可以將整個控件的DataContext作爲Show對象。

  • 將您的TextBlock綁定到節目的名稱。 Text =「{Binding Name」}
  • 將季節的ItemsSource 列表框綁定到Seasons集合。 的ItemsSource =「{結合四季}」 IsSynchronizedWithCurrentItem =「真」
  • 綁定發作的ItemsSource 列表框中當前季節的 情節集合。 ItemsSource =「{Binding Seasons/Episodes}」。

假設你的窗口的DataContext的是顯示對象時,XAML是:

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

所以,你的UI元素並不真正需要的名字。而且,將其轉換成代碼非常簡單,而且您的方法正確。你的代碼的主要問題是你在命名列表框時,當他們不需要它時。

假設季節對象有一個名爲情節屬性,它是集對象的集合,我覺得是:

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

人,那是快!簡單,正確。 謝謝! – Vegar 2009-02-03 21:26:38