首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个文件绑定到wpf数据网格

将多个文件绑定到wpf数据网格
EN

Stack Overflow用户
提问于 2018-02-20 01:33:56
回答 1查看 64关注 0票数 0

我是WPF的新手,我正在尝试使用MVVM将目录中的歌曲绑定到数据网格。到目前为止,我已经能够使用"foreach循环“绑定一个歌曲文件,但我无法想出显示其余歌曲的逻辑。以下是我到目前为止所做的工作:

代码语言:javascript
复制
using System.IO;

namespace MusicPlayer
{
public class MainWindowViewModel
{
    public MainWindowViewModel()
    {
        Songs = GetSongs();
    }

    public Songs Songs { get; set; }
    string title;
    string artist;
    string album;
    uint year;
    string genre;
    public Songs GetSongs()
    {
        DirectoryInfo di = new DirectoryInfo("C:/Users/USER/MyMusic");
        FileInfo[] Files = di.GetFiles("*.mp3"); //Getting mp3 files
        foreach (FileInfo file in Files)
        {
            string fileName = file.FullName;
            TagLib.File tagFile = TagLib.File.Create(fileName);
            title = tagFile.Tag.Title;
            artist = tagFile.Tag.FirstAlbumArtist;
            album = tagFile.Tag.Album;
            year = tagFile.Tag.Year;
            genre = tagFile.Tag.FirstGenre;
            //string duration = tagFile.Tag.time;
        }
        return new Songs { new Song { Name = title, Artist = artist, Album = album, Year = year, Genre = genre } };
    }
}
}

歌曲课

代码语言:javascript
复制
using System.Collections.ObjectModel;

namespace MusicPlayer
{
    public class Songs : ObservableCollection<Song>
    {
    }
}

宋代班

代码语言:javascript
复制
namespace MusicPlayer
{
    public class Song
    {
        public string Name { get; set; }
        public string Artist { get; set; }
        public string Album { get; set; }
        public string Duration { get; set; }
        public uint Year { get; set; }
        public string Genre { get; set; }
    }
}

xaml.cs文件

代码语言:javascript
复制
using System.Windows;


namespace MusicPlayer
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        MainWindowViewModel mainWindowViewModel;

        public MainWindow()
        {
            InitializeComponent();

            mainWindowViewModel = new MainWindowViewModel();

            DataContext = mainWindowViewModel;          
        }

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-20 03:46:20

从您的代码片段看,您只需向列表中添加一首歌曲。同样,如果歌曲类确实是从ObservableCollection派生的,那么您可以删除它并直接使用ObservableCollection。因此,在foreach循环之前初始化列表,然后添加歌曲作为循环的一部分:

代码语言:javascript
复制
    DirectoryInfo di = new DirectoryInfo("C:/Users/USER/MyMusic");
    FileInfo[] Files = di.GetFiles("*.mp3"); //Getting mp3 files

    var songs = new ObservableCollection<Song>();
    foreach (FileInfo file in Files)
    {
        string fileName = file.FullName;
        TagLib.File tagFile = TagLib.File.Create(fileName);
        title = tagFile.Tag.Title;
        artist = tagFile.Tag.FirstAlbumArtist;
        album = tagFile.Tag.Album;
        year = tagFile.Tag.Year;
        genre = tagFile.Tag.FirstGenre;
        //string duration = tagFile.Tag.time;
        songs.Add(new Song { Name = title, Artist = artist, Album = album, Year = year, Genre = genre });
    }
    return songs;

那么您的歌曲属性将改为ObservableCollection类型。此外,您可以跳过公共setter,只保留getter,使其成为只读属性(因为我们只在构造函数中设置它,这很好):

代码语言:javascript
复制
public MainWindowViewModel()
{
    Songs = GetSongs();
}

public ObservableCollection<Song> Songs { get; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48871354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档