1

Windowsストアアプリを開発しています。私はそのようなXMLを持っています:

<?xml version="1.0" encoding="utf-8" ?>
<music>
  <singer>
    <name>Coldplay</name>
    <song>Scientist</song>
    <lyrics>lol lalala</lyrics>
  </singer>
  <singer>
    <name>Coldplay</name>
    <song>test2</song>
    <lyrics>lol lalala2</lyrics>
  </singer>
  <singer>
    <name>another</name>
    <song>şarkı</song>
    <lyrics>lol lalala3</lyrics>
  </singer>
</music>

C# コードでは、「lvSingers」がリストビューです。そこに歌手の名前を綴じました。

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    string musicXMLPath = Path.Combine(Package.Current.InstalledLocation.Path, "Assets/test.xml");
    XDocument loadedData = XDocument.Load(musicXMLPath);
    var data = from query in loadedData.Descendants("singer")
               select new Singer
               {
                   name = (string)query.Element("name"),
                   song = (string)query.Element("song"),
                   akor = (string)query.Element("lyrics")
               };
    lvSingers.ItemsSource = data;
}

}

このコードを実行すると、複数の歌手の名前が表示されます。これは避けたいと思います。例:

Coldplay
Coldplay
another

あそこにコールドプレイを 1 つだけ置きたいだけです。私が欲しいのは、明確な出力だけです。フィードバックとヘルプをいただければ幸いです。よろしく...

4

2 に答える 2

1

私は自分のwin8開発マシンから離れています。listview がグループ化をどのように処理するかわかりません。以下を試すことができます。

    var data = from query in loadedData.Descendants("singer")
               select new Singer
               {
                   name = (string)query.Element("name"),
                   song = (string)query.Element("song"),
                   akor = (string)query.Element("lyrics")
               }.GroupBy(ex => ex.name);

必要なものによっては、リストビューに名前のみを含むデータソースを送信したい場合があります。

lvSingers.ItemsSource = data.Select(ex => (string)ex.name).Distinct();
于 2013-06-28T16:53:05.663 に答える
1

問題は、アーティスト名が繰り返されていても、Coldplay の曲は異なるため、個別の項目があることです。したがって、ItemsSource を個別のリストにバインドし、以下のようなものを使用して SelectedArtist プロパティを設定できます。

XDocument doc = XDocument.Load("Music.xml");
var data = doc.Descendants("singer").Select(x => new Singer {
    Name = (string)x.Element("name"),
    Song = (string)x.Element("song"),
    Lyrics = (string)x.Element("lyrics")
});
List<string> dataToBind = data.Select(x => x.Name).Distinct().ToList();
于 2013-06-28T17:05:39.737 に答える