modmoto
modmoto

Reputation: 3280

Adding a List of Songs to a ListBox

i am trying to make my own mediaplayer for Windows Phone 7 and for the first step, i want to display a List of all songs in my media library to select them. As i understood the ListBox, i just have to name the texblocks like the attributes of my class, which would be "Song"

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

And now i think, i should handle my list of songs to the GUI and i try to do that with:

   songListGUI.ItemsSource = songs;

But then i get a "InvalidOperationException" - Items collection must be empty before using ItemsSource. I found several problems like this, and they all created a new class, to display this content. But i would like to stick with the song class, as it comes in quite handy :/ Do you know what i am doing wrong here?

edit: i just found the solution. Don´t know exactly why, but this change in the .xaml made my 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>

Anybody could explan this to me?

Upvotes: 0

Views: 303

Answers (1)

Phil
Phil

Reputation: 42991

ListBox is an ItemsControl. The content of an ItemsControl maps to the Items property. So by doing this:

<ListBox>
  <SomeContent/>
</ListBox>

you're setting the Items property to <SomeContent/>. Since you aren't allowed to set the Items property and the ItemsSource property you get an exception.

When you do this:

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

You're not setting the content you're setting an attribute of the ListBox so there's no conflict.

Upvotes: 2

Related Questions