C# 如何随机选择列表框中的所有项目?
我不想随机编号,我想随机列出C#XAML Windows应用商店应用程序中列表框中的所有项目 有人有代码或者知道怎么做吗 我有这个列表框的代码C# 如何随机选择列表框中的所有项目?,c#,xaml,random,listbox,windows-store-apps,C#,Xaml,Random,Listbox,Windows Store Apps,我不想随机编号,我想随机列出C#XAML Windows应用商店应用程序中列表框中的所有项目 有人有代码或者知道怎么做吗 我有这个列表框的代码 <ListBox Name="Playlist" Background="White" DoubleTapped="Playlist_DoubleTapped" KeyUp="Playlist_KeyUp" Foreground="Black" SelectionMode="Single" SelectionChanged="Playli
<ListBox Name="Playlist" Background="White" DoubleTapped="Playlist_DoubleTapped" KeyUp="Playlist_KeyUp"
Foreground="Black" SelectionMode="Single" SelectionChanged="Playlist_SelectionChanged"
ScrollViewer.VerticalScrollMode="Enabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"
Grid.Column="0" Margin="28,82,1067,32">
@Baldrick这就是我将歌曲/视频添加到播放列表列表框的方式
public async void OpenFileButton_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker filePicker = new FileOpenPicker();
filePicker.ViewMode = PickerViewMode.List;
filePicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
filePicker.CommitButtonText = "Play";
foreach (string fileExtension in supportedAudioFormats)
{
filePicker.FileTypeFilter.Add(fileExtension);
}
foreach (string fileExtension in supportedVideoFormats)
{
filePicker.FileTypeFilter.Add(fileExtension);
}
IReadOnlyList<StorageFile> selectedFiles = await filePicker.PickMultipleFilesAsync();
if (selectedFiles.Count > 0)
{
foreach (StorageFile file in selectedFiles)
{
Playlist.Items.Add(file);
}
systemMediaControls.IsEnabled = true;
mediaSource.AutoPlay = true;
await SetNewMediaItem(0); // Start with first file in the list of picked files.
StorageFile files = Playlist.SelectedItem as StorageFile;
Thumbnail(files);
}
}
public async void OpenFileButton\u单击(对象发送方,路由目标)
{
FileOpenPicker filePicker=新的FileOpenPicker();
filePicker.ViewMode=PickerViewMode.List;
filePicker.SuggestedStartLocation=PickerLocationId.MusicLibrary;
filePicker.commitbuttonext=“播放”;
foreach(支持的AudioFormats中的字符串文件扩展名)
{
filePicker.FileTypeFilter.Add(文件扩展名);
}
foreach(支持视频格式的字符串文件扩展名)
{
filePicker.FileTypeFilter.Add(文件扩展名);
}
IReadOnlyList selectedFiles=await filePicker.PickMultipleFileAsync();
如果(selectedFiles.Count>0)
{
foreach(选定文件中的存储文件)
{
Playlist.Items.Add(文件);
}
systemMediaControls.IsEnabled=true;
mediaSource.AutoPlay=true;
wait SetNewMediaItem(0);//从拾取的文件列表中的第一个文件开始。
StorageFile files=播放列表。选择EdItem作为StorageFile;
缩略图(文件);
}
}
以下是一个示例
XAML:
为了将其绑定到列表框
,需要设置控件(窗口或其他)的DataContext
您可以在构造函数中调用此方法
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
InitializePlaylist(10); // <--
}
什么函数或事件将触发listbox项的随机化?Click=“Button\u Click”将是随机化listbox中所有项的按钮您最好将
ItemsSource
属性绑定到viewmodel中的备份列表(如ObservableCollection),然后在绑定列表上使用Fischer-Yates洗牌。这更干净,可以让你不用乱动列表框中的项目。你可以发布由按钮触发的功能吗?单击事件?@Nathan我目前正在使用音乐播放器应用程序。我可以随机选择索引。但是我想随机选择整个列表。请告诉我如何做按钮_单击(对象发送者,RoutedEventArgs e){Rand();}公共无效Rand(){Playlist.SelectedIndex=rnd.Next(Playlist.Items.Count-1);}哇..现在列表正在洗牌..自从过去两天以来,我无法做这个小事情..非常感谢@Anton Kedrov,谢谢你帮助我:)好的,现在我可以洗牌列表了,但是现在如何洗牌存储文件列表(例如歌曲列表)??此代码适用于任何类型的项目。只需将observedcollection playlitems
替换为observedcollection playlitems
,public IEnumerable ShuffleItems(IEnumerable items)
替换为public IEnumerable ShuffleItems(IEnumerable items)
,然后需要相应地修改列表框。您需要添加项目模板
。例如:
如果要绑定存储文件
项,则它将是存储文件
的属性之一。如名称
,路径
或显示名称
。
public ObservableCollection<string> PlaylistItems
{
get;
set;
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this; // <--
}
public void InitializeItems(int count)
{
var items = new List<string>(count);
for (int i = 0; i < count; i++)
items.Add("Item " + i);
PlaylistItems = new ObservableCollection<string>(items);
}
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
InitializePlaylist(10); // <--
}
public IEnumerable<string> ShuffleItems(IEnumerable<string> items)
{
var rnd = new Random();
return items.OrderBy(item => rnd.Next()).ToList();
}
private void Shuffle_Click(object sender, RoutedEventArgs e)
{
var shuffledItems = ShuffleItems(PlaylistItems);
PlaylistItems.Clear();
foreach (var item in shuffledItems)
PlaylistItems.Add(item);
}