所以我有一个由数组填充的列表框,其中有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具有我想要的所有信息。非常感谢你们的帮助。
答案 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
的对象的引用,因此不需要它。
最后,这是一个示例项目