1

新しい Windows ストア アプリ プロジェクトを作成し、それに Prism を追加しました。共通のインフラストラクチャを使用するようにメイン ページをセットアップしましたが、すべてうまく機能しています。Views フォルダーに、次のような TestPage という名前の 2 つ目のテスト ページを作成します。

<Infrastructure:VisualStateAwarePage
 .
 .
    xmlns:Infrastructure="using:Microsoft.Practices.Prism.StoreApps"
    Infrastructure:ViewModelLocator.AutoWireViewModel="True"
    >

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Infrastructure:VisualStateAwarePage>

ViewModels フォルダーに単純なモデルがあります。

public class TestPageViewModel { } 

ナビゲーション サービスを使用してページに移動すると (MSDN ドキュメントで説明されているように、Unity コンテナーにナビゲーション サービスがあります)、「エラーのインスタンスに設定されたオブジェクト参照」が表示されます。どこを指し示すスタックトレースもありません。それ以上の詳細はありません...なぜそのエラーが発生するのですか? 繰り返しますが、テスト ページ ビューとモデルはメイン ページと同じように設定されていますが、メインは最初は機能しますが、リダイレクト時にテストを読み込むことができません。

理由はありますか?

4

1 に答える 1

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

それが役立つことを願っています。

于 2013-08-19T02:38:49.290 に答える