从ListBox导航到详细信息页面。 WP8

时间:2014-09-08 20:11:05

标签: windows-phone-8 exception-handling listbox navigation master-detail

按照http://www.geekchamp.com/articles/windows-phone-mvvm-master---details-navigation-in-5-minutes上的指南,我在我的解决方案中添加了一个新项目,以便显示MasterPage(包含带有图像和DataTemplate中的texblock的ListBox)和DetailsPage(Header,Image和TextBlock)在StackPanel内)。列表显示很好,但是在图像上点击或文本块不会导航到DetailsPage或其他任何地方,但它会在输出中抛出此错误:

  

发生了'System.InvalidOperationException'类型的异常   Microsoft.Phone.ni.dll并未在托管/本机之前处理   边界程序'[732] TaskHost.exe'已退出,代码为-1   (0xFFFFFFFF的)。

转到App cs文件中的这部分代码:

// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
    if (Debugger.IsAttached)
    {
        // A navigation has failed; break into the debugger
            Debugger.Break();
    }
}

如果我将光标保持在NavigationFailed过程中的'e'参数,它会显示:

  

在'/DetailsPage.xaml'

位置找不到XAML

这就是我在'MasterPage.xaml'中包含的列表:

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <TextBlock Text="Tips Semana 1" Style="{StaticResource WeekHeader}"/>

    <ListBox x:Name="MainListBox" Margin="10" Background="#50F5F5F5" Foreground="Black"
             ItemsSource="{Binding Items}"
             SelectionChanged="MainListBox_SelectionChanged" >

        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding Image}" Width="100" Height="100" Stretch="Uniform"/>
                    <TextBlock Text="{Binding Title}" TextWrapping="Wrap" Margin="10" 
                               FontSize="25" VerticalAlignment="Center"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</StackPanel>

这是背后的代码。如果有人能告诉我错误并指导我正确使用SelectedItem / selectedItem / SelectedIndex / selectedIndex(我只是不知道如何使用它们,也不知道它们的正确表示法)

private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    //If Selected Item is null (no selection) do nothing
    if (MainListBox.SelectedItem == null)

        return;

    //Navigate to the new page
    NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedItem, UriKind.Relative));

    //NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedIndex=" + MainListBox.SelectedIndex, UriKind.Relative));

    //Reset selected item to null (no selection)
    MainListBox.SelectedItem = null;
}

2 个答案:

答案 0 :(得分:0)

首先,将代码更改回SelectedIndex但是我会使用其他一些数字来标识您的自定义类。

在大多数情况下,您获得的此异常意味着它无法在您的解决方案中找到请求的页面。如果您将DetailsPage移动到某个子文件夹,则需要将路径更改为:[Subfolder] /DetailsPage.xaml ...

此外,如果您再次遇到异常,请将鼠标悬停在e中的private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)参数上并告诉我们它的内容。

答案 1 :(得分:0)

知道了! 你是对的Parad1s3。 当我向我的解决方案添加一个新项目时,导航服务需要第二个项目和页面的完整路径导航到(好奇我想,因为我在第二个项目中的页面之间导航)。 好吧,这是我的解决方案:

在MasterPage中:

NavigationService.Navigate(new Uri("/DataBoundApp1;component/DetailsPage.xaml?selectedItem=" + (MainLongListSelector.SelectedItem as ItemViewModel).ID, UriKind.Relative));

感谢您的帮助!