我创建了一个新的Windows应用商店应用项目,并为其添加了Prism。我设置主页面以使用通用基础设施,这一切都很有效。我在Views文件夹中创建了第二个Test页面,名称为TestPage,如下所示:
<Infrastructure:VisualStateAwarePage
.
.
xmlns:Infrastructure="using:Microsoft.Practices.Prism.StoreApps"
Infrastructure:ViewModelLocator.AutoWireViewModel="True"
>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
</Grid>
</Infrastructure:VisualStateAwarePage>
在ViewModels文件夹中有一个简单的模型:
public class TestPageViewModel { }
当我使用导航服务导航到页面时(我在Unity容器中有我的导航服务,如MSDN文档中所述),我得到“对象引用设置为错误的实例”。没有堆栈跟踪指向哪里,没有更多细节...任何想法为什么我得到该错误?同样,测试页面视图和模型的设置与我的主页面相同,但主要工作原理,但我无法在重定向上加载测试。
知道为什么吗?
答案 0 :(得分:0)
这也常常引起我的注意,并且在众多例子中没有很好地解释。
确保在App.xaml.cs文件中设置IoC容器时,还要告诉ViewModelLocator使用Unity通过SetDefaultViewModelFactory()方法查找View Model实例:
private readonly IUnityContainer _container = new UnityContainer();
protected override void OnInitialize(IActivatedEventArgs args)
{
base.OnInitialize(args);
_container.RegisterInstance<INavigationService>(NavigationService);
_container.RegisterInstance<ISessionStateService>(SessionStateService);
_container.RegisterInstance<IFlyoutService>(FlyoutService);
// etc
// Tell the Unity ViewModelLocator to use the Unity container to resolve ViewModels
ViewModelLocator.SetDefaultViewModelFactory((viewModelType) => _container.Resolve(viewModelType));
}
希望有所帮助。