2016-05-15 17 views
1

は...日間立ち往生したことがあり、その後、私は場合には2つのページ1を持っている問題プリズム:ViewModelLocator.AutowireViewModel =「true」の

だったものが見つかった場合しない限り、私はのNavigationServiceを解決することはできませんタブレットの場合はもう一方、電話の場合はもう1つ。名前が異なるため、ViewModelLocator.AutowireViewModelを使用してバインディングコンテキストと同じビューモデルを共有することはできません。この場合、私は各ページのビューモデルコピーを作成したくないので、古典的なバインディングコンテキストを使用しています。 私の問題は、実行すると "このオブジェクトプリズムのために定義されたパラメータのないコンストラクタがない"というエラーが表示されます。このエラーの原因は、viewModelにnavigationServiceが必要なコンストラクタがあることです。 このエラーを解決するには、ナビゲーションサービスを引数として削除する必要がありますが、ナビゲーションサービスが必要なので、ナビゲートする必要があります。

答えて

1

この場合、ViewModelLocationProvider.Registerメソッドの使用をお勧めします。

if (Device.Idiom == TargetIdiom.Tablet) 
    ViewModelLocationProvider.Register("MainPage",() => your logic); 
else 
    ViewModelLocationProvider.Register("MainPage",() => your logic); 

EDIT::だから、アプリケーションのRegisterTypes方法では、あなたはこれに似た症状を置くことができます実際には、あなたはまだ手動でこのようにそれをやってINavigationServiceを解決する必要があります。私はあなたのプリズム問題を再開するつもりです。このシナリオを有効にするには、ViewModelocationProvider.Registerメソッドを改善することができます。

+0

ありがとうございます。あなたは同じviewmodelを持っていることについてあなたの提案を確認するだけです。新しいMainPageViewModel()を返すことができるように、あなたのコードスニッピットであなたのロジックを意味しますか? 手作業では、INavigationServiceをコンストラクタで渡すことを意味しますか? – BraveHeart

+1

はい、これはViewModelのインスタンスを返す場所です。問題は、あなたがINavigationServiceを作成してそれをctorに渡す責任があるということです。ここで何が行われる必要があるかはわかりますhttps://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Unity.Forms/PrismApplication.cs#L49 –

+0

これは私たちがViewModelLoctorを改善する理由ですインスタンスだけでなく型の登録をサポートします。私はあなたの問題を再開しました。あなたはシナリオを確認して、私にこの問題を解決させてもらえますか? –

関連する問題