LINQ to XML для разбора нескольких Uri на одну кнопку гиперссылки - PullRequest
0 голосов
/ 06 января 2012

У меня была проблема с передачей проанализированной строки в событие нажатия кнопки. Это было решено в этой теме здесь , но теперь есть еще одна небольшая проблема, связанная с LINQ TO XML. Я делаю страницу, которая покажет все приложения, которые я делаю, и будет обновлена ​​с XML, который я буду размещать на моем сервере. На этой странице я анализирую значок, название, цену и рыночную Uri приложений. Я связываю Uri и название приложений с одной кнопкой гиперссылки, но проблема в том, что каждая кнопка гиперссылки в списке приводит меня на одну и ту же страницу рынка. Как это исправить, чтобы каждая гиперссылка переходила на другую страницу?

Вот код:

  public partial class MorePage : PhoneApplicationPage
{
    private string appLink;

    public MorePage()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        WebClient client = new WebClient();
        Uri uritoXML = new Uri("http://www.allanhaapalainen.com/AppsXML/MorePageXML.xml", UriKind.RelativeOrAbsolute);
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
        client.DownloadStringAsync(uritoXML);

        base.OnNavigatedTo(e);
    }

 public void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    {
        XDocument moreApps = XDocument.Parse(e.Result);

        morePageAppList.ItemsSource = from Apps in moreApps.Descendants("App")
                                       select new MoreApps
                                       {
                                           MoreImage = Apps.Element("link").Value,
                                           Price = Apps.Element("price").Value,
                                           Title = Apps.Element("title").Value
                                       };

        var attribute = (from Apps in moreApps.Descendants("App")
                         select new MoreApps
                         {
                             AppAttribute = (string)Apps.Attribute("id").Value
                         }).FirstOrDefault();


        string appAttr = attribute.AppAttribute;

        var link = (from Apps in moreApps.Descendants("App")
                    where Apps.Attribute("id").Value == appAttr
                    select new MoreApps
                    {
                        AppUri = (string)Apps.Element("marketplace").Value
                    }).FirstOrDefault();

        appLink = link.AppUri;            
    }

    private void App_Name_Click(object sender, RoutedEventArgs e)
    {
        ShowMarket(appLink);
    }

    private void ShowMarket(string id)
    {
        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.ContentIdentifier = id;
        marketplaceDetailTask.Show();
    }

}

И XAML:

<ListBox Height="500" Width="Auto" Name="morePageAppList" Margin="0,0,0,0" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="173">
                            <Image Source="{Binding MoreImage}" Height="Auto" Width="Auto" />
                                <StackPanel Orientation="Vertical">
                                     <HyperlinkButton Name="appName" Content="{Binding Title}" Margin="15,60,0,0"  Click="App_Name_Click" />
                                     <TextBlock Name="price" Text="{Binding Price}" Margin="28,0,0,0" Foreground="#FFBD0000" />
                                </StackPanel>
                        </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

1 Ответ

1 голос
/ 06 января 2012

Как я уже упоминал в предыдущем посте, вы можете использовать параметр tag. Обновите ваш DataTemplate

<DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="173">
                            <Image Source="{Binding MoreImage}" Height="Auto" Width="Auto" />
                                <StackPanel Orientation="Vertical">
                                     <HyperlinkButton Name="appName" Content="{Binding Title}" Tag="{Binding}" Margin="15,60,0,0"  Click="App_Name_Click" />
                                     <TextBlock Name="price" Text="{Binding Price}" Margin="28,0,0,0" Foreground="#FFBD0000" />
                                </StackPanel>
                        </StackPanel>
                </DataTemplate>

тогда в вашем случае

private void App_Name_Click(object sender, RoutedEventArgs e)
    {
        var button = (HyperLinkButton)sender;
        var selectedApp = (MoreApps)button.Tag;

        ShowMarket(selectedApp.AppUri);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...