将歌曲列表添加到ListBox

时间:2013-02-18 08:24:12

标签: c# windows-phone-7 xaml media

我正在尝试为Windows Phone 7制作自己的媒体播放器,第一步,我想在媒体库中显示所有歌曲的列表以选择它们。 正如我理解ListBox,我只需要命名texblocks就像我的类的属性,这将是“歌曲”

<ListBox FontSize="30" Name="songListGUI" Height="330" Margin="0,120,0,0">
     <Button Width="430" Height="60" BorderThickness="0" Margin="0" >
          <Button.Content>
              <StackPanel Orientation="Horizontal" Width="420" Height="auto">
                 <TextBlock Name="Name" Text="{Binding Name}" FontSize="22"></TextBlock>
                 <TextBlock Text=" - " FontSize="22"></TextBlock>
                 <TextBlock Name="Artist" Text="{Binding Artist}" FontSize="22"></TextBlock>
              </StackPanel>
          </Button.Content>
       </Button>
    </ListBox>

现在我认为,我应该将我的歌曲列表处理到GUI,并尝试使用:

   songListGUI.ItemsSource = songs;

但是后来我得到了一个“InvalidOperationException” - 在使用ItemsSource之前,Items集合必须为空。 我发现了这样的几个问题,他们都创建了一个新类来显示这个内容。但我想坚持使用歌曲课程,因为它非常方便:/ 你知道我在这里做错了什么吗?

编辑: 我刚刚找到了解决方案。不知道究竟为什么,但.xaml中的这种变化使我的da:):

<ListBox FontSize="30" Name="songListGUI" Height="330" Margin="0,120,0,0">
   <ListBox.ItemTemplate>
       <DataTemplate>
           <Button Width="430" Height="60" BorderThickness="0" Margin="0" >
                 <Button.Content>
                      <StackPanel Orientation="Horizontal" Width="420" Height="auto">
                          <TextBlock Name="Name" Text="{Binding Name}" FontSize="22"></TextBlock>
                          <TextBlock Text=" - " FontSize="22"></TextBlock>
                          <TextBlock Name="Artist" Text="{Binding Artist}" FontSize="22"></TextBlock>
                      </StackPanel>
                  </Button.Content>
            </Button>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

有人可以向我解释这个吗?

1 个答案:

答案 0 :(得分:2)

ListBox是ItemsControl。 ItemsControl的内容映射到Items属性。通过这样做:

<ListBox>
  <SomeContent/>
</ListBox>

您将Items属性设置为<SomeContent/>。由于您不允许设置Items属性和ItemsSource属性,因此会出现异常。

执行此操作时:

<ListBox>
  <ListBox.ItemTemplate>...</ListBox.ItemTemplate>
</ListBox>

您没有设置您正在设置ListBox属性的内容,因此没有冲突。