2013-02-18 4 views
0

Я пытаюсь создать свой собственный медиаплеер для Windows Phone 7 и для первого шага, я хочу отобразить список всех песен в своей медиа-библиотеке, чтобы выбрать их. Как я понял ListBox, я просто назвать texblocks как атрибуты моего класса, которые были бы «Песня»Добавление списка песен в ListBox

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

И теперь я думаю, я должен обрабатывать мой список песен для графического интерфейса и я пытаюсь сделать это с помощью:

songListGUI.ItemsSource = songs; 

Но тогда я получаю «InvalidOperationException» - коллекция предметов должна быть пустой перед использованием ItemsSource. Я нашел несколько таких проблем, и все они создали новый класс, чтобы отобразить этот контент. Но я хотел бы придерживаться класса песни, так как это очень удобно:/ Знаете ли вы, что я делаю неправильно здесь?

Редактировать: Я только что нашел решение. Не знаю, почему именно, но это изменение в .xaml сделал мой да :):

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

Любой мог explan это мне?

ответ

2

ListBox - ItemsControl. Содержимое элемента ItemsControl сопоставляется с свойством Items. Так, делая это:

<ListBox> 
    <SomeContent/> 
</ListBox> 

вы устанавливаете свойство Items в <SomeContent/>. Поскольку вам не разрешено устанавливать свойство Items, а свойство ItemsSource вы получаете исключение.

Когда вы сделаете это:

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

Вы не устанавливая настройки вы атрибут ListBox так, что нет никакого конфликта содержания.

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