2013-10-25 121 views
-1

我有一个数据列表, 每行都会显示一个数据,并且会有一个按钮,当我点击显示的数据时,我想给一些数据到前一页,当我点击同一行中的按钮时,我想要将相同的数据发送到下一页。如何从Windows Phone的列表框中选择一个项目?

我的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 *,但我得到一个异常在执行DetailButton_Click_1

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

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

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

我应该怎么做使它工作?

回答

1

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

另请注意,单击数据模板上的按钮不一定会在列表中选择该项目。试图抓住被点击项目的数据上下文,并用它来代替.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); 
    } 
} 

您的代码,因为它的立场,将有一个空引用,因为你可以不投一个按钮,一个列表框。

0

尝试验证,如果selectvalue为null之前执行代码:

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); 
     } 
    } 
相关问题