Передача проанализированной строки в обработчик события щелчка - PullRequest
0 голосов
/ 06 января 2012

Я анализирую данные из XML-файла с помощью WebClient. В методе DownloadStringCompleted у меня есть строка, которая анализируется, которую я хочу передать в обработчик события щелчка. Я хочу, чтобы событие клика открывало сведения о торговой площадке моего приложения. Для этого мне нужна разобранная строка, представляющая собой GUID, и поместить ее в обработчик событий. Я попытался гуглить это и ничего не нашел. Я просто не могу понять, как это сделать.

Любая помощь будет высоко оценена. Спасибо!

Вот код:

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 link = (from Apps in moreApps.Descendants("App")
                      select new MoreApps
                      {
                         AppUri = (string)Apps.Element("marketplace").Value
                      }).Single();

        string appLink = link.AppUri;
    }

    private void App_Name_Click(object sender, RoutedEventArgs e)
    {

        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.ContentIdentifier = "Marketplace GUID";
        marketplaceDetailTask.Show();
    }

ОБНОВЛЕННЫЙ КОД:

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 link = (from Apps in moreApps.Descendants("App")
                    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();
    }

Ответы [ 2 ]

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

Просто переместите желаемую функциональность из в обработчик кликов и добавьте параметр.Таким образом, вы можете просто вызвать метод и передать значение ShowMarket(link.AppUri)

private string appid;

// ..
appid = link.AppUri;
// ..
private void App_Name_Click(object sender, RoutedEventArgs e)
{
    ShowMarket(appid);
}

private void ShowMarket(string id)
{

    MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
    marketplaceDetailTask.ContentIdentifier = id;
    marketplaceDetailTask.Show();
}

edit : в ответ на комментарий, разъясняющий вопрос ... все, что вам нужнодля этого нужно установить link.AppUri для свойства или поля класса, а затем в обработчике щелчка просто использовать эту переменную для передачи в ShowMarket (или, как вы решите, для выражения функциональности, даже прямо в обработчике щелчка)

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

На мой взгляд, есть два способа сделать то, что вы хотите.

1) Создайте переменную для всего класса, или поле. Это можно увидеть и изменить в любом из методов классов. Это общая переменная между методами классов.

2) Попробуйте вызвать метод App_Name_Click, передав непосредственно нужную переменную в качестве объекта в параметре sender. то есть App_Name_Click(appLink, new RoutedEventArgs()) или более аккуратный способ сделать это: App_Name_Click(this, new MyRoutedEventArgs(){GUID = appLink})

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