从列表框内的超链接获取索引

时间:2011-12-21 04:37:24

标签: c# xaml windows-phone-7

所以我有一个由数组填充的列表框,其中有25个条目。在列表框的每一行中,我有一个“注释”超链接按钮,它具有与列表框不同的功能。因此,由于我从技术上讲没有选择列表框项,因此它不会返回索引。无论如何,这是代码:

<ListBox Name="mainListBox" SelectionChanged="mainListBox_SelectionChanged" Width="460" HorizontalAlignment="Center" VerticalAlignment="Stretch">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Left">
                        <Image Source="{Binding data.thumbnail}" Margin="5" VerticalAlignment="Top" Width="70" />
                        <StackPanel Orientation="Vertical">
                            <TextBlock x:Name="TitleInfo" Text="{Binding data.title}" TextWrapping="Wrap" Foreground="DarkSeaGreen" Width="370" />
                                <TextBlock x:Name="AuthorInfo" Text="{Binding data.author}" FontSize="15" Margin="2" />
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Score:" Margin="2" FontSize="14"  />
                                <TextBlock x:Name="score" Text="{Binding data.score}" FontSize="14" Margin="2"/>
                                <HyperlinkButton Content="Comments" Click="HyperlinkButton_Click" FontSize="15" x:Name="commentsLink" />
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

我想要这一行:

<HyperlinkButton Content="Comments" Click="HyperlinkButton_Click" FontSize="15" x:Name="commentsLink" />

给我xaml文件后面代码中的索引。

我该怎么做呢?

由于

编辑: 这是有问题的代码。

private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
    {
        var hb = sender as HyperlinkButton;
        if (hb != null)
        {
            var obj = hb.Tag as RootObject;
            if (obj != null)
            {
                MessageBox.Show(obj.data.children[0].data.title, obj.data.children[0].data.author,  MessageBoxButton.OK);
            }
        }
        textBlock1.Text = Global.sUrl;
    }

此外,这是我的对象的代码:

public class MediaEmbed
{
    public string content { get; set; }
    public int? width { get; set; }
    public bool? scrolling { get; set; }
    public int? height { get; set; }
}
public class Oembed
{
    public string provider_url { get; set; }
    public string description { get; set; }
    public string title { get; set; }
    public string url { get; set; }
    public string author_name { get; set; }
    public int height { get; set; }
    public int width { get; set; }
    public string html { get; set; }
    public int thumbnail_width { get; set; }
    public string version { get; set; }
    public string provider_name { get; set; }
    public string thumbnail_url { get; set; }
    public string type { get; set; }
    public int thumbnail_height { get; set; }
    public string author_url { get; set; }
}
public class Media
{
    public string type { get; set; }
    public Oembed oembed { get; set; }
}
public class Data2
{
    public string domain { get; set; }
    public MediaEmbed media_embed { get; set; }
    public object levenshtein { get; set; }
    public string subreddit { get; set; }
    public string selftext_html { get; set; }
    public string selftext { get; set; }
    public object likes { get; set; }
    public bool saved { get; set; }
    public string id { get; set; }
    public bool clicked { get; set; }
    public string title { get; set; }
    public Media media { get; set; }
    public int score { get; set; }
    public bool over_18 { get; set; }
    public bool hidden { get; set; }
    public string thumbnail { get; set; }
    public string subreddit_id { get; set; }
    public string author_flair_css_class { get; set; }
    public int downs { get; set; }
    public bool is_self { get; set; }
    public string permalink { get; set; }
    public string name { get; set; }
    public double created { get; set; }
    public string url { get; set; }
    public string author_flair_text { get; set; }
    public string author { get; set; }
    public double created_utc { get; set; }
    public int num_comments { get; set; }
    public int ups { get; set; }
}
public class Child
{
    public string kind { get; set; }
    public Data2 data { get; set; }
}
public class Data
{
    public string modhash { get; set; }
    public Child[] children { get; set; }
    public string after { get; set; }
    public object before { get; set; }
}
public class RootObject
{
    public string kind { get; set; }
    public Data data { get; set; }
}

RootObject包含数据,这些数据通向子(数组),这导致data2具有我想要的所有信息。非常感谢你们的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用Tag参数。请注意,{Binding}绑定整个对象本身。

例如,

class Myobj
{
   string param1 { get; set; } 
   string param2 { get; set; }
}

ObservableCollection<Myobj> collection;

如果collection是您的ItemsSource,那么在DataTemplate中,{Binding}指的是Myobj的整个实例。

<HyperlinkButton Content="Comments" Click="HyperlinkButton_Click" FontSize="15" x:Name="commentsLink" Tag="{Binding}" />

然后在您的Click事件中,只需将发件人转换为超链接按钮,然后获取标记。

...
var hb = sender as HyperLinkButton;
if (hb != null)
  {
     var obj = hb.Tag as Myobj;
     if (obj != null)
     { 

     }
  }
...

检查这个关于绑定的备忘单。这非常有帮助。

http://www.nbdtech.com/Free/WpfBinding.pdf

请注意,此实现不使用SelectedIndex - 但它不需要。由于HyperLinkButton具有对您生成ListBoxItem的对象的引用,因此不需要它。

最后,这是一个示例项目

https://skydrive.live.com/redir.aspx?cid=ef08824b672fb5d8&resid=EF08824B672FB5D8!352&parid=EF08824B672FB5D8!343