しかし、本当に正確ではありません。
MVVMと言ったように、ViewModelをビューから分離することです。 パターンを破るのは、ViewModel内にViewのインスタンスがあり、それをMVVMパターンを破るビューモデルから直接制御し始めた場合です。
ビューがviewmodelの内部で依存するライブラリを使用しても、mvvmパターンは破られません。両側にJson Libraryがある場合を考えてみましょう。しかし、それは私たちのソリューションがどのようにクロスプラットフォームになるかを制限します。あなたのケースでは、あなたのビューモデルをXamarin以外のプラットフォーム(WPFなど)と共有することはできません。
あなたが本当にプリズムを利用したいと同じ時間にWPFのための同じのviewmodelsを持っている場合は、理論的には、これは動作します:
は持っていたり、別のポータブルプロジェクトにあなたのviewmodelsを移動
- Xamarin.FormsはPrismを参照しません。
- Prism.Formsロジックをコードの背後に移動すると、NavigationServiceやPageDialogServicesなどのものを注入できます。同時に、ViewModelをインスタンス化してバインディングコンテキストに割り当てることで、ビューをビューモデルにバインドする必要があります。だから多分あなたはビューモデルロケータを妥協するでしょう。
- ViewModelからユーザーにメッセージを送信する場合は、ビューが受信するイベントをビューモデル内で発生させ、ビューからメッセージを表示することができます。
- このようにして、理論的にWPFとビューモデルを共有できます。 WPFおよびモバイル以来
ノート
- は、あなたが技術的な問題ではなく、論理的、Vewmodelを共有する難しさを持っていないかもしれませんが、非常に異なっています。例えば、モビールはページベースであり、各ページは理想的でよりきれいなケースで独自のViewModelを持ちます。一方、WPFは1つの大きなViewModelを持つ大きなビューです。 Xamarinのすべてのビューモデルを共有してWPFプロジェクトで効果的に使用する唯一の方法は、WPFプロジェクトを地域に配置することです。
- AutoViewModelLocatorが実際に動作するかどうかは100%確信していません。登録を使用するだけで、Prismチームによって機能する可能性があります。私はあなたがビューを登録することができ、それはViewModelだが、私はどのバージョンを覚えていないプリズムの実装が1つあったことを覚えている。しかし、個人的には、コードビハインドやXamlで
BindingContext = _viewmodel;
と言うだけでは大したことではありません。
回答ありがとうございます。スイッチングプラットフォームは、私が恐れていることです - 実際には私が求めていることです。 MVVMを使用すると、Viewの切り替えが簡単になり、Xamarin.FormsでPrismを使用するとこの可能性が制限されます。私は質問を編集するつもりです。 – raV720
問題はありませんが、私は自分の答えを編集しますが、プリズムを使っていることは何ですか?なぜ私はViewModelでそれを持っていますか? autoviewmodelロケータ用ですか? – BraveHeart
私はまだプリズムを使用していません。私はちょうどいくつかのプロジェクトで動作するようにmvvmフレームワークを選択しています。確かに私はナビゲーション、おそらくメッセージングセンター、prism.formsのautofac iocプラグイン、オートバインドビューとビューモデルを使用します(私が推測するようにautoviewmodelロケータ) – raV720