C# 如何在windows phone中从列表框中选择项目?

C# 如何在windows phone中从列表框中选择项目?,c#,windows-phone-7,C#,Windows Phone 7,我有一份数据清单, 每一行将显示一个数据并有一个按钮,当我单击显示的数据时,我想将一些数据发送到上一页,当我单击同一行中的按钮时,我想将相同的数据发送到下一页 我的Xaml代码 <ListBox x:Name="List" HorizontalAlignment="Left" Height="612" Margin="6,7,0,0" VerticalAlignment="Top" Width="443" SelectionChanged="List_SelectionChanged_1"

我有一份数据清单, 每一行将显示一个数据并有一个按钮,当我单击显示的数据时,我想将一些数据发送到上一页,当我单击同一行中的按钮时,我想将相同的数据发送到下一页

我的Xaml代码

<ListBox x:Name="List" HorizontalAlignment="Left" Height="612" Margin="6,7,0,0" VerticalAlignment="Top" Width="443" SelectionChanged="List_SelectionChanged_1">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Width="420" Height="50">
                        <TextBlock x:Name="tbName" Width="400" Height="44" FontSize="22" FontWeight="Bold" Text="{Binding Name}" />
                        <Button x:Name="DetailButton" Height="44" Width="20" Content=">" FontWeight="Bold" Click="DetailButton_Click_1"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
我的DetailButton\u Click\u 1事件处理程序是

private void List_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
    {
        Display selectedItemData = (sender as ListBox).SelectedValue as Display;            
        NavigationService.Navigate("/Page1.xaml",selectedItemData);
    }
private void DetailButton_Click_1(object sender, RoutedEventArgs e)
    {
        Display selectedItemData = (sender as ListBox).SelectedValue as Display;
        NavigationService.Navigate("/page3.xaml", selectedItemData);
    }
对于*List\u SelectionChanged\u 1*,一切正常,但执行时出现异常

Display selectedItemData = (sender as ListBox).SelectedValue as Display;
在单击Detail按钮时,我得到一个异常,一个空异常

An exception of type 'System.NullReferenceException' occurred in ExpenseApp.DLL but was not handled in user code

我应该怎么做才能使它工作?

在执行代码之前,请尝试验证selectvalue是否为空:

 private void DetailButton_Click_1(object sender, RoutedEventArgs e)
    {
        If ((sender as ListBox).SelectedValue != null){
             Display selectedItemData = (sender as ListBox).SelectedValue as Display;
             NavigationService.Navigate("/page3.xaml", selectedItemData);
        }
    }

根本问题是按钮单击事件的发送者是按钮,而不是列表框

还要注意,单击数据模板上的按钮不一定会在列表中选择该项。尝试获取单击项目的数据上下文,并使用该上下文而不是。选择EdItem

private void DetailButton_Click_1(object sender, RoutedEventArgs e)
{
    var clickedUIElement =  sender as Button;
    if (null == clickedUIElement) { Return; }
    Display selectedItemData = clickedUIElement.DataContext as Display;
    if(null != selectedItemData)
    {
        NavigationService.Navigate("/page3.xaml", selectedItemData);
    }
}
您的代码将具有空引用,因为您不能将按钮强制转换为列表框