2012-01-05 24 views
0

我正在使用WebClient从xml文件解析数据。在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(); 
    } 
+0

你在哪里创建按钮?如果您通过绑定将该按钮的“内容”赋予,您可以给它一个AppUri的“标签”。 – 2012-01-05 20:57:30

+0

我将如何使用标签? – 2012-01-05 21:35:15

+0

在您的点击事件中,var button =(Button)sender; var moreapps =(MoreApps)button.Tag; MessageBox.Show(moreapps.AppUri); – 2012-01-05 21:38:33

回答

1

只需将您所需的功能出单击处理的并添加参数。这样的话,你可以调用该方法,并传递值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(); 
} 

编辑:响应评论澄清的问题......所有你需要做的是设置link.AppUri到一个类属性或字段,然后在点击处理程序中,只需使用该变量传递给ShowMarket(或者您选择表达功能,即使在点击处理程序中)

+0

似乎这个问题更多的是关于访问按钮事件中的AppUri,而不是如何调用一个函数。 – 2012-01-05 21:07:25

+0

谢谢你的回复!是的,Willmel是正确的。我想在按钮事件中访问AppUri。尽管您的示例有效,但它会自动将我带到市场。我想点击按钮来做到这一点。 – 2012-01-05 21:33:02

+0

这是不明显的,不知道downvote真的需要。我已经相应地更新了答案。 – 2012-01-05 21:35:57

-2

正如我所看到的,有两种方法做你想做的事。

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

2)尝试调用App_Name_Click方法,直接在sender参数中传递想要作为对象的变量。即App_Name_Click(appLink, new RoutedEventArgs())或更整洁的方式是这样做的:App_Name_Click(this, new MyRoutedEventArgs(){GUID = appLink})

+0

#2会如何工作? – 2012-01-05 21:13:05

+0

感谢您花时间回复! – 2012-01-05 21:58:27

相关问题