Выбор нескольких записей из XML с одинаковым именем WP7 - PullRequest
0 голосов
/ 20 августа 2011

Я пытался в течение нескольких часов и искал в сети примеры того, как получить несколько элементов с одинаковыми именами, но с разными атрибутами, и связать их с моим XAML в приложении для wp7,

Самый простой способ объяснить это просто показать вам,

вот что у меня есть

       public class Match
    {
        public string HomeTeam { get; set; }
        public string AwayTeam { get; set; }
        public string HomeScore { get; set; }
        public string AwayScore { get; set; }
        public string GoalsPlayer { get; set; }
        public string goal { get; set; }
        public string GoalsTime { get; set; }
        public string DismissalsPlayer { get; set; }
        public string DismissalsTime { get; set; }
        public string BookingPlayer { get; set; }
        public string BookingTime { get; set; }
        public string GameTime { get; set; }
    }

 void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        XElement element = XElement.Parse(e.Result);
        try
        {
            listBox2.ItemsSource = from item in element.Descendants("competition")
                                   from match in item.Elements("match").Where(arg => arg.Attribute("awayTeam").Value == team | arg.Attribute("homeTeam").Value == team)
                                   select new Match
                                   {
                                       HomeTeam = (string)match.Attribute("homeTeam"),
                                       AwayTeam = (string)match.Attribute("awayTeam"),
                                       HomeScore = (string)match.Attribute("homeTeamScore"),
                                       AwayScore = (string)match.Attribute("awayTeamScore"),
                                       GoalsPlayer = (string)match.Attribute("playerName"),
                                       GoalsTime = (string)match.Attribute("time"),
                                   };
        }
        catch (Exception ex)
        {
             Debug.WriteLine(ex.StackTrace);
        }

вот мой XAML

<ListBox Name="listBox2" Grid.Row="0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Name="teams" Orientation="Vertical">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Margin="0,10,0,0" Foreground="White" HorizontalAlignment="Left" Text="{Binding HomeTeam}"/>
                                    <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding HomeScore}" TextWrapping="Wrap" FontSize="20" />
                                    <TextBlock Margin="0,10,0,0" Foreground="White" HorizontalAlignment="Left" Text="{Binding AwayTeam}"/>
                                    <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding AwayScore}" TextWrapping="Wrap" FontSize="20" />
                                </StackPanel>
                                <StackPanel Name="scores" Orientation="Horizontal">
                                    <TextBlock Margin="0,10,0,0" Foreground="White" Text="{Binding GoalsPlayer}" TextWrapping="Wrap" FontSize="20" />
                                    <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding GoalsTime}" TextWrapping="Wrap" FontSize="20" />
                                </StackPanel>
                                <StackPanel Name="dismissals">
                                    <TextBlock Foreground="White" Text="{Binding DismissalsPlayer}" TextWrapping="Wrap" FontSize="20"/>
                                    <TextBlock Foreground="White" Text="{Binding DismissalsTime}" TextWrapping="Wrap" FontSize="20"/>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

вот мой XML

<match homeTeam="Arsenal" awayTeam="Liverpool" homeTeamScore="0" awayTeamScore="2">
<goal time="77:13" playerName="Aaron Ramsey" />
<goal time="89:57" playerName="Luis Suarez"/>
<dismissal time="69:59" playerName="Emmanuel Frimpong"/>
</match>

Я понимаю, что я получу только одну запись на своей странице для целей, которая будет первым элементом цели в моем XML

как я могу это сделать и реализовать каждый

<goal ...>
<goal ...>

в моей Datatemplate, которая в настоящее время показывает только первую запись, еще одна потенциальная проблема: я не могу гарантировать, сколько будет целей, поэтому я действительно не уверен, как это сделать целиком

спасибо

John

1 Ответ

1 голос
/ 21 августа 2011

Должен ли playerName разрешить даже ваш match?Потому что именно здесь вы решаете его в своем XML-запросе.

Независимо от того, что вы ищете здесь, это подобъект, который может храниться в свойстве списка объекта Match:

listBox2.ItemsSource = from item in element.Descendants("competition")
                       from match in item.Elements("match")
                           .Where(arg => arg.Attribute("awayTeam").Value == team || 
                                         arg.Attribute("homeTeam").Value == team)
                       select new Match
                       {
                           HomeTeam = (string)match.Attribute("homeTeam"),
                           AwayTeam = (string)match.Attribute("awayTeam"),
                           HomeScore = (string)match.Attribute("homeTeamScore"),
                           AwayScore = (string)match.Attribute("awayTeamScore"),
                           Goals = match.Elements("goals").Select(ev => new MatchEvent
                           {
                               Player = (string)ev.Attribute("playerName"),
                               Time = (string)ev.Attribute("time")
                           }).ToList(),
                           Dismissals = match.Elements("dismissals").Select(ev => new MatchEvent
                           {
                               Player = (string)ev.Attribute("playerName"),
                               Time = (string)ev.Attribute("time")
                           }).ToList(),
                       };

и обновленный XAML:

<ListBox Name="listBox2" Grid.Row="0">
    <ListBox.ItemTemplate>
        <DataTemplate>
             <StackPanel Name="teams" Orientation="Vertical">
             <StackPanel Orientation="Horizontal">
                  <TextBlock Margin="0,10,0,0" Foreground="White" HorizontalAlignment="Left" Text="{Binding HomeTeam}"/>
                  <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding HomeScore}" TextWrapping="Wrap" FontSize="20" />
                  <TextBlock Margin="0,10,0,0" Foreground="White" HorizontalAlignment="Left" Text="{Binding AwayTeam}"/>
                  <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding AwayScore}" TextWrapping="Wrap" FontSize="20" />
              </StackPanel>
              <ItemsControl ItemsSource="{Binding Goals}">
                  <ItemsControl.ItemTemplate>
                      <DataTemplate>
                          <StackPanel Name="scores" Orientation="Horizontal">
                              <TextBlock Margin="0,10,0,0" Foreground="White" Text="{Binding Player}" TextWrapping="Wrap" FontSize="20" />
                              <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding Time}" TextWrapping="Wrap" FontSize="20" />
                          </StackPanel>
                      </DataTemplate>
                  </ItemsControl.ItemTemplate>
              </ItemsControl>

              <ItemsControl ItemsSource="{Binding Dismissals}">
                  <ItemsControl.ItemTemplate>
                      <DataTemplate>
                          <StackPanel Name="scores" Orientation="Horizontal">
                              <TextBlock Margin="0,10,0,0" Foreground="White" Text="{Binding Player}" TextWrapping="Wrap" FontSize="20" />
                              <TextBlock Margin="10,10,30,0" Foreground="White" Text="{Binding Time}" TextWrapping="Wrap" FontSize="20" />
                          </StackPanel>
                      </DataTemplate>
                  </ItemsControl.ItemTemplate>
              </ItemsControl>
          </StackPanel>
      </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...