另一个“名称'itembutton'在当前上下文中不存在”(WP8,XAML)

时间:2013-03-05 15:12:27

标签: xaml windows-phone-8

我知道这个问题已发布了大约一千次,但我没有找到解决问题的解决方案。

我有一个带有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) {
    ....

1 个答案:

答案 0 :(得分:0)

DataTemplate看起来您在ListBoxLongListSelector这样的容器中显示此按钮。

这意味着itembutton范围内没有this(推测this可能是UserControlPhoneApplicationPage):实际上有一个对于每个ListBoxItems

您必须找到另一种查找按钮的方法。

<强>更新: 您应该会发现按钮的DataContext与其所包含的列表中的项目相匹配。这可能是最简单的处理方式:但是如果所有其他方法都失败,您可以按照建议使用Tag属性

像:

private void ItemButtonClick(object sender, RoutedEventArgs e)
{
    var theButton = (Button) sender;
    var myItem = (TypeOfAnObjectInMyList) theButton.DataContext;
    doSomethingWithMyItem(myItem);