Для начала вы можете установить ItemSource
вашего ListBox
во внутреннюю IEnumerable
структуру, например SongList = List<Song>
, содержащую ссылки на ваши песни.Затем присоедините обработчик событий DoubleClick
к вашему ListBox
.В случае двойного щелчка sender
теперь должно быть вашим ListBox
.Выбранный элемент (песня) должен тогда быть (sender as EventList).SelectedItems[0]
.Посмотрите, есть ли этот элемент в вашем SongList
, и если это так, играйте в него!
Ваш код XAML может выглядеть следующим образом:
<Grid>
<ListBox Name="songList" MouseDoubleClick="songList_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=songName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
И в вашем коде инициализации:
songList.ItemSource = InternalSongList;
И обработчик событий:
private void songList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Controls.ListBox songList = sender as Controls.ListBox;
if (songList.SelectedItems.Count > 0)
{
Song selectedSong = songList.SelectedItems[0];
// To be on the safe side
if (InternalSongList.Contains(selectedSong))
{
selectedSong.Play();
}
}
}
Конечно, это можно улучшить с помощью безопасности, и я полагаю, что воспроизведение песни в действительности немного сложнее.Что касается случайного выбора, случайная функция, выбирающая индекс для вашего внутреннего списка, вероятно, должна это делать.Повторить должно быть одинаково просто: посчитайте проигранные песни и убедитесь, что ни одна из них не воспроизводится дважды.Когда все песни будут воспроизведены один раз, очистите список проигранных песен и повторите!Преимущество использования IEnumerable
заключается в том, что вам не нужно слишком сильно прикасаться к ListBox
, просто установите ItemsSource
, и он справится сам с собой.