C# 将已解析的字符串传递到click事件处理程序

C# 将已解析的字符串传递到click事件处理程序,c#,windows-phone-7.1,windows-phone-7,C#,Windows Phone 7.1,Windows Phone 7,我正在使用WebClient解析xml文件中的数据。在DownloadStringCompleted方法中,我有一个经过解析的字符串,我希望将其传递到click事件处理程序中。我希望单击事件打开我的应用程序的市场详细信息。为此,我需要一个经过解析的字符串,它是一个GUID,并将其放置在事件处理程序中。我试着用谷歌搜索,但什么也没找到。我就是不知道怎么做 我们将非常感谢您的帮助。谢谢 代码如下: public void client_DownloadStringCompleted(object s

我正在使用WebClient解析xml文件中的数据。在DownloadStringCompleted方法中,我有一个经过解析的字符串,我希望将其传递到click事件处理程序中。我希望单击事件打开我的应用程序的市场详细信息。为此,我需要一个经过解析的字符串,它是一个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();
    }

只需将所需功能移出单击处理程序并添加一个参数。这样,您只需调用该方法并传入值
ShowMarket(link.AppUri)


编辑:回应澄清问题的评论。。。您需要做的就是将link.AppUri设置为类属性或字段,然后在单击处理程序中,只需使用该变量传递给ShowMarket(或者以您选择的方式来表示功能,即使在单击处理程序中也是如此)

在我看来,有两种方法可以实现您想要的功能

1) 创建一个类范围的变量,也就是一个字段。这可以在任何类方法中看到和修改。它是类和方法之间的共享变量


2) 尝试调用App_Name_Click方法,直接将所需变量作为对象传递到sender参数中。ie
App\u Name\u Click(appLink,new RoutedEventArgs())
或者一种更整洁的方法是:App\u Name\u Click(this,new MyRoutedEventArgs(){GUID=appLink})

您在哪里创建按钮?如果您通过绑定为按钮提供其
内容
,则可以为其提供AppUri的
标记
。我将如何使用该标记?在单击事件中,var button=(button)sender;var moreapps=(moreapps)button.Tag;MessageBox.Show(moreapps.AppUri);我还注意到一件事。你在描述中说你想进入自己的应用程序页面。如果真的是这样,你所需要做的就是根本不设置ContentIdentifier。是的,如果我只有一个应用程序,情况就是这样。我正在制作一个“更多”屏幕,上面有我所有应用程序的列表,我想从我服务器上的xml解析信息(链接、标题、价格等)。这样我就可以发布新的应用程序,只更改xml,而不是对每个应用程序进行更改。问题似乎更多的是访问按钮事件中的AppUri,而不是如何调用函数。感谢您的回复!是的,威尔梅尔是对的。我想在按钮事件中访问AppUri。即使你的例子有效,它也会自动带我去市场。我希望点击按钮就可以做到这一点。这并不明显,不确定是否真的需要否决票。我已经相应地更新了答案。我没有投反对票,其他人投了反对票。无论如何,谢谢你帮助我!现在我有个小问题。对于列表中的每个项目,该按钮都会将我带到同一个市场页面。我如何使它获得正确的Uri?我将用当前代码更新上面的代码。感谢您抽出时间回复!
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();
}