按照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;
}
答案 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));
感谢您的帮助!