簡體   English   中英

將多個文件綁定到WPF DataGrid

[英]bind multiple files to wpf datagrid

我是WPF新手,我正在嘗試使用MVVM將歌曲從目錄綁定到datagrid。 到目前為止,我已經能夠使用“ foreach循環”綁定一個歌曲文件,但是我無法提出將顯示其余歌曲的邏輯。 到目前為止,這是我所做的:

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

歌曲課

using System.Collections.ObjectModel;

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

歌曲課

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

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

    }
}

從您的代碼片段看,您只將一首歌曲添加到列表中。 同樣,如果Songs類確實只是從ObservableCollection派生的,則可以將其刪除並直接使用ObservableCollection。 因此,請在foreach循環之前初始化列表,然后在循環中添加歌曲:

    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;

您的Songs屬性將改為ObservableCollection類型。 此外,您可以跳過公共設置器,而只保留getter使其成為只讀屬性(因為我們只在正常的構造函數中設置了它):

public MainWindowViewModel()
{
    Songs = GetSongs();
}

public ObservableCollection<Song> Songs { get; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM