nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。なお掲載内容は個人の見解であり、所属する企業を代表するものではありません。

PrismでViewModelがバインドされないときの調査方法

私も良くやるので、もっとも有効な調査方法をさらっと書いておきます。

対処方法

バインドしたいViewと、そのViewへインジェクションしている(孫・ひ孫含む)全てのクラスのコンストラクタにブレークポイントを張って、インスタンス生成時にどこかでエラーが発生していないかデバッグ実行で確認する。

想定要因

ViewModelのインスタンス生成に何らかの理由で失敗しているのがほとんどのケースです。

一昔前は、XAMLでViewModelLocator.AutowireViewModelの指定さ忘れなんてケースもありましたが、最新の(Visual Studioの)アイテムテンプレートでViewを生成した場合、自動的に設定してくれるため、現在ではほとんどあり得ないと思います。
そもそも6.2からはViewModelLocator.AutowireViewModelの指定は不要になっています。

www.nuits.jp

同様の理由で、ViewとViewModelの命名規則に関しても、最新の(Visual Studioの!)テンプレートを利用していれば、自動作成してくれるためほとんど発生しません。
最新の(Visual Studioの!)環境で6.2以上のPrismを利用している場合、上記の対処方法で9割がた解決できると思います。

例外ケース

  • ViewModelを手で作成している場合、命名規則が正しいか確認しましょう
  • Prismが6.2未満の場合は、ViewModelLocator.AutowireViewModel=trueが設定されているか確認しましょう

大体こんなところじゃないでしょうか? 他にもあったら、ぜひ教えてください!

それではまた!