Я работаю над программой для своей диссертации, которая, надеюсь, когда закончится, позволит вам сортировать музыкальные файлы, используя данные тегов.На данный момент у меня есть представление дерева wpf, в котором я хочу отобразить список всей музыки, найденной программой, отсортированной по Artist> Album> Title.У меня есть список файлов тегов, собранных с помощью taglib #, которые я могу использовать для создания TreeViewItems для каждой дорожки, а затем могу добавить их в TreeView.Проблема в том, что я не могу добавить дубликаты исполнителей / альбомов вместо того, чтобы добавлять трек как дочерний элемент уже добавленного исполнителя / альбома.Я пытался использовать foreach для итерации по элементам, и если заголовок (имя исполнителя) совпадает с заголовком добавляемого нового исполнителя, затем перейдите в альбом и добавьте его как дочерний элемент текущего элемента, затем выполнитета же проверка для альбомов и переход к названию трека и так далее.У меня была небольшая радость, хотя даже если заголовки совпадают точно, они всегда возвращаются как несоответствующие и, таким образом, добавляется дублирующий исполнитель.
Я совершенно новичок в использовании TreeViews, так что я не уверен, что сделаю это наилучшим образом, или если это просто недостаток в моей логике или что-то еще, поэтому любая помощь будет принята с благодарностью.
Attatched - это код, который я использую для создания и проверки элементов.
public void PopulateTreeView(TreeView searchResults)
{
foreach (TagLib.File tagFile in tagFiles)
{
TreeViewItem Artist;
TreeViewItem Album;
TreeViewItem Title;
//creating the TreeViewItems
Artist = SetArtistsName(tagFile);
Album = SetAlbumName(tagFile);
Title = SetTrackName(tagFile);
//adding them to TreeView
AddArtistToTreeView(tagFile, searchResults, Artist, Album, Title);
}
}
Функции, которые создают TreeViewItems
private TreeViewItem SetArtistsName(TagLib.File tagFile)
{
TreeViewItem Artist = new TreeViewItem();
if (tagFile.Tag.AlbumArtists.Length == 0)
{
Artist.Header = "Unknown Artist";
return Artist;
}
else
{
Artist.Header = tagFile.Tag.AlbumArtists[0].ToString();
return Artist;
}
}
private TreeViewItem SetAlbumName(TagLib.File tagFile)
{
TreeViewItem Album = new TreeViewItem();
Album.Header = tagFile.Tag.Album;
return Album;
}
private TreeViewItem SetTrackName(TagLib.File tagFile)
{
TreeViewItem Track = new TreeViewItem();
Track.Header = tagFile.Tag.Title;
return Track;
}
И код для добавленияв TreeView / Проверка на наличие дубликатов
private void AddArtistToTreeView(TagLib.File tagFile, TreeView searchResults, TreeViewItem Artist, TreeViewItem Album, TreeViewItem Title)
{
if (searchResults.Items.Count == 0)
{
searchResults.Items.Add(Artist);
Artist.Items.Add(Album);
Album.Items.Add(Title);
}
else
{
artistFlag = CheckArtist(searchResults, Artist);
switch (artistFlag)
{
case 0:
searchResults.Items.Add(Artist);
if (Artist.Items.Count == 0)
{
Artist.Items.Add(Album);
Album.Items.Add(Title);
}
break;
case 1:
albumFlag = CheckAlbum(Artist, Album);
switch (albumFlag)
{
case 0:
Artist.Items.Add(Album);
if (Album.Items.Count == 0)
{
Album.Items.Add(Title);
}
break;
case 1:
trackFlag = CheckTitle(Album, Title);
break;
case 2:
break;
}
break;
case 2:
break;
}
}
}
private int CheckArtist(TreeView searchResults, TreeViewItem Artist)
{
if (searchResults.Items.Count == 0)
{
return 0;
}
else
{
foreach (TreeViewItem tvi in searchResults.Items)
{
if (tvi.Header.ToString() != Artist.Header.ToString())
{
return 0;
}
else
{
return 1;
}
}
return 2;
}
}
private int CheckAlbum(TreeViewItem Artist, TreeViewItem Album)
{
if (Artist.Items.Count == 0)
{
return 0;
}
else
{
foreach (TreeViewItem tvi in Artist.Items)
{
if (tvi.Header.ToString() != Album.Header.ToString())
{
return 0;
}
else
{
return 1;
}
}
return 2;
}
}
private int CheckTitle(TreeViewItem Album, TreeViewItem Title)
{
if (Album.Items.Count == 0)
{
return 0;
}
else
{
foreach (TreeViewItem tvi in Album.Items)
{
if (tvi.Header.ToString() != Title.Header.ToString())
{
return 0;
}
else
{
return 1;
}
}
return 2;
}
}
Извините, это немного длинно, но опять же, любая помощь будет принята с благодарностью :) Спасибо