C# 如何随机选择列表框中的所有项目?

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

我不想随机编号,我想随机列出C#XAML Windows应用商店应用程序中列表框中的所有项目

有人有代码或者知道怎么做吗

我有这个列表框的代码

<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);
}