0

こんにちは、これは xaml ページを使用しています。選択したアイテムでナビゲートしたいです。

 <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ページコードは以下のとおりです

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

いずれかのアイテムを選択すると、selectedItemData is nullというエラーが発生したため、他のページに移動できません。誰か助けてもらえますか?

4

2 に答える 2

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

于 2013-03-27T03:07:09.757 に答える
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;
        }
    }

備考: テスト ページでは、(Notch)DataContext を使用してクラスのインスタンスを参照できるため、Image データを ((Notch)DataContext).Image として使用できます。

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;

備考: Notch は、ItemSource として ListBox にバインドするクラスです。

よろしくスパソ

于 2013-03-27T22:40:19.367 に答える