1

我创建了一个新的 Windows 应用商店应用项目并将 Prism 添加到其中。我将主页设置为使用通用基础设施,一切都很好。我在 Views 文件夹中创建了第二个测试页面,名称为 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 Container 中有导航服务,如 MSDN 文档中所述),我得到“对象引用设置为错误实例”。没有堆栈跟踪指向哪里,没有更多的细节......知道为什么我会收到那个错误吗?同样,测试页面视图和模型的设置与我的主页相同,但 main 最初可以正常工作,但我无法在重定向时加载测试。

知道为什么吗?

4

1 回答 1

0

这也是我经常遇到的问题,并且在众多示例中并没有得到很好的解释。

确保当您在 App.xaml.cs 文件中设置 IoC 容器时,您还告诉 ViewModelLocator 使用 Unity 通过 SetDefaultViewModelFactory() 方法查找您的视图模型实例:

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

希望有帮助。

于 2013-08-19T02:38:49.290 回答