-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>

List_SelectionChanged_1事件处理程序的代码是,

private void List_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
    {
        Display selectedItemData = (sender as ListBox).SelectedValue as Display;            
        NavigationService.Navigate("/Page1.xaml",selectedItemData);
    }

我的DetailButton_Click_1事件处理程序是,

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

*List_SelectionChanged_1* 工作正常,但执行时出现异常

Display selectedItemData = (sender as ListBox).SelectedValue as Display;

DetailButton_Click_1,我得到一个异常空异常,

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

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

4

2 回答 2

1

根本问题是按钮单击事件的发送者是按钮,而不是 ListBox。

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

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);
    }
}

就目前而言,您的代码将具有空引用,因为您不能将 Button 转换为 ListBox。

于 2013-10-25T13:40:39.163 回答
0

在执行代码之前尝试验证选择值是否为空:

 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);
        }
    }
于 2013-10-25T13:39:30.050 回答