3

我有一个三个嵌套类,节目、季节和剧集,其中一个节目有季节,而季节有剧集。

我想绑定两个列表框,以便第一个列出季节,第二个列出该季节的剧集。

我怎样才能做到这一点?我更喜欢在代码中而不是 xaml 中进行设置,但如果您知道如何使用 xaml 进行设置,总比没有好。

一个简化的 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";
  }
}

有人知道如何绑定第二个列表框吗?

4

1 回答 1

8

编辑:添加更多细节。

好的,假设您有一个 Show 对象。这有一个季节的集合。每个季节都有一个情节集合。然后,您可以让整个控件的 DataContext 成为 Show 对象。

  • 将您的 TextBlock 绑定到节目的名称。文本="{绑定名称"}
  • 将季节列表框的 ItemsSource 绑定到 Seasons 集合。ItemsSource="{Binding Seasons}" IsSynchronizedWithCurrentItem="True"
  • 将情节列表框的 ItemsSource 绑定到当前季节的情节集合。ItemsSource="{Binding Seasons/Episodes}"。

假设您的 Window 的 DataContext 是 Show 对象,则 XAML 将是:

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

所以你的 UI 元素并不需要名字。此外,将其转换为代码非常容易,而且您走在正确的道路上。您的代码的主要问题是您在列表框并不真正需要它时命名了它们。

假设 Season 对象有一个名为 Episodes 的属性,它是 Episode 对象的集合,我认为是:

 Binding bindEpisodes = new Binding("Seasons/Episodes");
于 2009-02-03T21:20:55.813 回答