我知道这个问题已发布了大约一千次,但我没有找到解决问题的解决方案。
我有一个带有ItemTemplate
的LongListSelector:
<DataTemplate x:Key="AddrBookItemTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock FontWeight="Bold" Text="{Binding Name}" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" />
<Button x:Name="itembutton" CommandParameter="{Binding ItemID}" Content="{Binding ButtonCaption}" Width="150" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="0" Click="ItemButtonClick"/>
</Grid>
</DataTemplate>
所以会发生什么只是我得到了我在标题中发布的这个漂亮的错误消息。我没有线索,为什么?!
private void ItemButtonClick(object sender, RoutedEventArgs e)
{
if (sender == this.itemButton) {
....
答案 0 :(得分:0)
从DataTemplate
看起来您在ListBox
或LongListSelector
这样的容器中显示此按钮。
这意味着itembutton
范围内没有this
(推测this
可能是UserControl
或PhoneApplicationPage
):实际上有一个对于每个ListBoxItems
!
您必须找到另一种查找按钮的方法。
<强>更新强>:
您应该会发现按钮的DataContext
与其所包含的列表中的项目相匹配。这可能是最简单的处理方式:但是如果所有其他方法都失败,您可以按照建议使用Tag
属性
像:
private void ItemButtonClick(object sender, RoutedEventArgs e)
{
var theButton = (Button) sender;
var myItem = (TypeOfAnObjectInMyList) theButton.DataContext;
doSomethingWithMyItem(myItem);