Uwp Windows模板工作室Caliburn.Micro添加新页面
我正在尝试用Windows Template Studio、Caliburn.Micro和Navigation View开发一个UWP解决方案。问题是,当我添加一个新页面时,在尝试导航时会出现“System.NullReferenceException:'对象引用未设置为对象的实例'”错误 我注意到在方法中:Uwp Windows模板工作室Caliburn.Micro添加新页面,uwp,caliburn.micro,navigationview,Uwp,Caliburn.micro,Navigationview,我正在尝试用Windows Template Studio、Caliburn.Micro和Navigation View开发一个UWP解决方案。问题是,当我添加一个新页面时,在尝试导航时会出现“System.NullReferenceException:'对象引用未设置为对象的实例'”错误 我注意到在方法中: private void OnItemInvoked(WinUI.NavigationViewItemInvokedEventArgs args) { if (ar
private void OnItemInvoked(WinUI.NavigationViewItemInvokedEventArgs args)
{
if (args.IsSettingsInvoked)
{
// Navigate to the settings page - implement as appropriate if needed
}
else if (args.InvokedItemContainer is WinUI.NavigationViewItem selectedItem)
{
var pageType = selectedItem.GetValue(NavHelper.NavigateToProperty) as Type;
var viewModelType = ViewModelLocator.LocateTypeForViewType(pageType, false);
_navigationService.NavigateToViewModel(viewModelType);
}
}
ViewModelLocator.LocateTypeForViewType(pageType,false)返回“NULL”
我在各自的文件夹中添加了新的视图和视图模型,并将它们称为TestPage和TestViewModel。我还在App.xaml.cs文件中添加了“_container.PerRequest()”,并在Resources.resw文件中添加了Shell_测试项
这就是ShellView.xaml的外观:
<winui:NavigationView
x:Name="navigationView"
IsBackButtonVisible="Visible"
IsBackEnabled="{x:Bind ViewModel.IsBackEnabled, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.Selected, Mode=OneWay}"
IsSettingsVisible="False"
cm:Message.Attach="[Event ItemInvoked] = [Action OnItemInvoked($eventArgs)]"
Background="{ThemeResource SystemControlBackgroundAltHighBrush}">
<winui:NavigationView.MenuItems>
<winui:NavigationViewItem x:Uid="Shell_ContenedorMapa" Icon="Document" helpers:NavHelper.NavigateTo="views:ContenedorMapaPage" />
<winui:NavigationViewItem x:Uid="Shell_Page1" Icon="Document" helpers:NavHelper.NavigateTo="views:RNDPage" />
<winui:NavigationViewItem x:Uid="Shell_Page2" Icon="Document" helpers:NavHelper.NavigateTo="views:IPHPage" />
<winui:NavigationViewItem x:Uid="Shell_Page3" Icon="Document" helpers:NavHelper.NavigateTo="views:SIPPage" />
<winui:NavigationViewItem x:Uid="Shell_Test" Icon="Document" helpers:NavHelper.NavigateTo="views:PruebaPage" />
</winui:NavigationView.MenuItems>
<i:Interaction.Behaviors>
<behaviors:NavigationViewHeaderBehavior
x:Name="navigationViewHeaderBehavior"
DefaultHeader="{x:Bind ViewModel.Selected.Content, Mode=OneWay}">
<behaviors:NavigationViewHeaderBehavior.DefaultHeaderTemplate>
<DataTemplate>
<Grid>
<TextBlock
Text="{Binding}"
Style="{ThemeResource TitleTextBlockStyle}"
Margin="{StaticResource SmallLeftRightMargin}" />
</Grid>
</DataTemplate>
</behaviors:NavigationViewHeaderBehavior.DefaultHeaderTemplate>
</behaviors:NavigationViewHeaderBehavior>
</i:Interaction.Behaviors>
<Grid>
<Frame x:Name="shellFrame" DataContext="{x:Null}" />
</Grid>
</winui:NavigationView>
谁能告诉我我错过了什么?我已经搜索了一段时间了,没有幸找到一个教程或任何类型的信息
提前谢谢
干杯 默认情况下,Caliburn Micro遵循视图和视图模型的命名规则(以View/ViewModel pr Page/PageViewModel结尾)。“LocateTypeForViewType”方法将遵循命名约定的规则查找/检测指定视图的视图模型
在您的例子中,命名约定是不同的(TestPage/TestViewModel)。你有两个选择
- 更改视图/视图模型的命名,以遵循Caliburn Micro使用的约定
- 使用NameTransformer识别您自己的命名约定
ViewLocator.NameTransformer.AddRule("Model$", string.Empty);
您可以在此处阅读有关名称转换器的更多信息。
您的问题解决了吗?你有什么进展吗?@AryaDing MSFT没有。。。这个问题没有解决。一旦我找到解决方案,我会把它贴在这里。干杯谢谢你的回答!遗憾的是,它没有起作用。在UWP中(至少在使用Windows Template Studio生成项目时),命名约定已设置为Page/ViewModel。还有什么我可以试试的吗?谢谢!!