2011-08-19 55 views
0

我有一个堆栈面板与多个文本块绑定到解析XML文件的结果。我可以使TextBlock可点击 - 基于XML解析结果吗?

我想让每个结果都有一个onlick事件,然后链接到更多信息甚至message.show框,但它必须使用它显示的结果中的值。

这对于disaplys结果列表框的.XAML部分。)

<ListBox Height="435" 
     HorizontalAlignment="Left" 
     Name="TradeSearch1" 
     VerticalAlignment="Top" 
     Width="397" 
     Grid.ColumnSpan="3" 
     Margin="0,63,0,0"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal" 
        Height="200"> 
      <Image Source="{Binding ImageSource}" 
        Height="150" Width="150" 
        VerticalAlignment="Top" 
        Margin="0,10,8,0"/> 
      <StackPanel Width="370" > 
       <TextBlock Text="{Binding Title}" 
          TextWrapping="Wrap" 
          Foreground="#FFE51A1A" 
          FontSize="16" /> 
       <TextBlock Text="{Binding PriceDisplay}" 
          TextWrapping="Wrap" 
          FontSize="20" 
          Foreground="Black" /> 
       <TextBlock Text="{Binding ListingId}" 
          TextWrapping="Wrap" 
          FontSize="20" 
          Foreground="Black" /> 
       <TextBlock Text="{Binding Region}" 
          TextWrapping="Wrap" 
          FontSize="18" 
          Foreground="Black" /> 
      </StackPanel> 
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

其中一个文本块的返回(ListingID)的值。理想情况下,当用户点击这个结果时,他们会被带到另一个页面,根据结果得到的LIstingID表单,这个页面会取消更多的结果。

上市ID为400332970

有没有办法到价值携带到另一个页面,并在这样的使用呢?其中ListingID.XMl将成为onClick结果中的listingId。

WebClient Trademe = new WebClient(); 
Trademe.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Trademe_DownloadStringCompleted); 
Trademe.DownloadStringAsync(new Uri("http://api.trademe.co.nz/v1/Listings/" + ListingID.xml)); 

对不起,如果这是令人困惑,我试图尽我所能解释。希望有人知道我在说什么。

回答

2

如果我理解正确,可以使用QueryString将信息传递到下一页。

//handle the selectionchanged event (replace 'myObject' with your object type) 
void ListBoxSelectionChanged(object sender, SelectionChangedEventArgs args) 
{ 
    var lbi = ((sender as ListBox).SelectedItem as myObject); 
    if(lbi != null) 
    { 
     string id = lbi.ListingId.ToString(); 
     NavigationService.Navigate("/NewPage.xaml?listingid=" + id, UriKind.Relative));  
    } 
} 

然后,在您的NewPage.xaml页面中,可以读取查询字符串的值。 (您可以添加错误检查,或使用QueryString.TryGetValue代替以避免例外)。

string id = NavigationContext.QueryString["listingid"]; 

您可以使用id为您发布的下载代码的一部分。

+0

会不会通过所有listingID的?而不是用户点击的那个?有大约20个不同的列表都与他们自己ListingID – Rhys

+0

@Rhys:不,它不会。推测你将ListBox的ItemSource绑定到代码后面的某个集合。上面的答案中提到的'myObject'是该集合中的一个对象。因此,对应于ListBox的选定项目的对象将仅包含被轻击的ListBoxItem的列表ID。 – Praetorian

+0

@keyboardP好吧,听起来像是我的解决方案。我不明白用对象类型替换我的对象?你的意思是String,Bool等? – Rhys

相关问题