2013-03-26 103 views
0

嗨,这是我使用xaml页面,我想用选定的项目导航。下面如何设置将页面传递到另一个页面的值?

private void NotchsList11_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Notch selectedItemData = (sender as ListBox).SelectedItem as Notch; 
     if(selectedItemData != null) 
     { 
      NavigationService.Navigate(new Uri(string.Format("/Test.xaml?parameter={0}",selectedItemData.articleid), UriKind.Relative)); 
     } 
    } 

<ListBox x:Name="NotchsList11" Margin="0,0,0,0" Grid.Row="3" HorizontalAlignment="left" Width="Auto" Grid.RowSpan="2"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel VerticalAlignment="Top" Width="Auto"> 
      <ListBox ItemsSource="{Binding Images}" Width="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled" SelectionChanged="NotchsList11_SelectionChanged"> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> 
         </StackPanel> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Image Source="{Binding}" Width="152" Height="90" Stretch="Fill" VerticalAlignment="Top"> 
        </Image> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
      </ListBox> 
     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

我xaml.cs页面代码中给出,如果我选择任何一个项目,我不能浏览其他页面,因为我得到了错误selectedItemData是null.so任何一个可以帮助我?

+0

什么是列表框的类的ItemSource? selectedItemData为null是因为投射到Notch可能不起作用。 – 2013-03-26 22:16:31

+0

在函数的第一行放置一个断点,然后在立即窗口中输入“(sender as ListBox).SelectedItem”而不带引号。如果它不为空,那么你可以看到什么样的项目。 – 2013-03-26 22:52:03

回答

0

不要试图从发件人对象拉。如果实际上代码认为某个项目是真正选中的而不是null,那么只需从列表对象中直接提取需要的东西即可。

你只需要改变你的SelectionChanged方法是这样的:

private void NotchsList11_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (NotchsList11.SelectedItem != null) 
     { 
      NavigationService.Navigate(new Uri(string.Format("/Test.xaml?parameter={0}", 
       (NotchsList11.SelectedItem as Notch).articleid), UriKind.Relative)); 
     } 
    } 

下面是一个例子: http://code.msdn.microsoft.com/wpapps/Windows-Phone-8-JumpStart-1b7c34e3/sourcecode?fileId=72994&pathId=1694015380

+0

嗨,我改变了这件事,但没有改变我的输出。 – user123 2013-03-27 05:08:32

+0

您的应用程序中的其他某些代码可能存在问题,您可能无法看到该代码。如果您分享更多的代码和数据,我们可能会找出问题的全部范围。 – 2013-03-28 01:39:39

+0

嗨,如果你想我所有的代码,请看看这个链接,并帮助我。我想你可以帮助我。[http://stackoverflow.com/questions/15544201/how-to-set-page-navigation-from- listbox-to-another-page/15652950?noredirect = 1#15652950] – user123 2013-03-28 04:10:23

0

A.

 private void NotchsList11_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Notch selectedItemData = NotchsList11.SelectedItem as Notch; 
     if (selectedItemData != null) 
     { 
      NavigationService.Navigate(new Uri(string.Format("/Test.xaml?parameter={0}",selectedItemData.articleid), UriKind.Relative)); 
     } 
    } 

B.或者你可以使用全SelectedItemData对象作为数据上下文

private void NotchsList11_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Notch selectedItemData = NotchsList11.SelectedItem as Notch; 
     if (selectedItemData != null) 
     { 
      NavigationService.Navigate(new Uri("/Test.xaml", UriKind.Relative)); 
      FrameworkElement root = Application.Current.RootVisual as FrameworkElement; 
      root.DataContext = selectedItemData; 
     } 
    } 

备注:在测试页面,您可以使用(缺口)的DataContext引用类的实例,所以你可以使用图像数据((缺口)的DataContext)图像配

C.或者这样说:

 private void NotchsList11_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.AddedItems.Count > 0) 
     { 
      NavigationService.Navigate(new Uri(((Notch)e.AddedItems[0]).articleid, UriKind.Relative)); 

      ((ListBox)sender).SelectedIndex = -1; 

备注:缺口是你作为绑定到的ItemSource列表框

问候 司帕索

+0

嗨,感谢重播。我希望你的答案。但我怎样才能获得选定的价值,并显示相关文章到详细信息页面?可以帮助我吗? – user123 2013-03-28 04:32:43

相关问题