2016-12-12 17 views
0

MVVMパターンでは、ViewModelはView(およびその依存関係)に関する知識がありません。prism.formsにはXamarin.Formsの依存関係があります

Xamarin.Formsのプリズム(MVVMライブラリ)はXamarin.Formsに依存しているため、プリズムチームはマイクロソフトのパターン&の習慣を満たすと主張していますが、Xamarin.Formsには依存しています。別のライブラリにはそのような依存関係はありません(例:mvvmcross、freshmvvm)

これを理解する方法は?

EDIT:

  1. ブレイブハートの答えによると:WPF用のViewModelプロジェクトに(Xamarin.Forms依存性)Xamarin.Formsためのプリズムで作成されたビューモデルプロジェクトを移行する方法は難しいですか?
  2. Xamarin.FormsのPrismは今後Xamarin.Formsの依存関係を削除しますか?

答えて

1

しかし、本当に正確ではありません。

MVVMと言ったように、ViewModelをビューから分離することです。 パターンを破るのは、ViewModel内にViewのインスタンスがあり、それをMVVMパターンを破るビューモデルから直接制御し始めた場合です。

ビューがviewmodelの内部で依存するライブラリを使用しても、mvvmパターンは破られません。両側にJson Libraryがある場合を考えてみましょう。しかし、それは私たちのソリューションがどのようにクロスプラットフォームになるかを制限します。あなたのケースでは、あなたのビューモデルをXamarin以外のプラットフォーム(WPFなど)と共有することはできません。

あなたが本当にプリズムを利用したいと同じ時間にWPFのための同じのviewmodelsを持っている場合は、理論的には、これは動作します:

    は持っていたり、別のポータブルプロジェクトにあなたのviewmodelsを移動
  1. Xamarin.FormsはPrismを参照しません。
  2. Prism.Formsロジックをコードの背後に移動すると、NavigationServiceやPageDialogServicesなどのものを注入できます。同時に、ViewModelをインスタンス化してバインディングコンテキストに割り当てることで、ビューをビューモデルにバインドする必要があります。だから多分あなたはビューモデルロケータを妥協するでしょう。
  3. ViewModelからユーザーにメッセージを送信する場合は、ビューが受信するイベントをビューモデル内で発生させ、ビューからメッセージを表示することができます。
  4. このようにして、理論的にWPFとビューモデルを共有できます。 WPFおよびモバイル以来

ノート

  • は、あなたが技術的な問題ではなく、論理的、Vewmodelを共有する難しさを持っていないかもしれませんが、非常に異なっています。例えば、モビールはページベースであり、各ページは理想的でよりきれいなケースで独自のViewModelを持ちます。一方、WPFは1つの大きなViewModelを持つ大きなビューです。 Xamarinのすべてのビューモデルを共有してWPFプロジェクトで効果的に使用する唯一の方法は、WPFプロジェクトを地域に配置することです。
  • AutoViewModelLocatorが実際に動作するかどうかは100%確信していません。登録を使用するだけで、Prismチームによって機能する可能性があります。私はあなたがビューを登録することができ、それはViewModelだが、私はどのバージョンを覚えていないプリズムの実装が1つあったことを覚えている。しかし、個人的には、コードビハインドやXamlでBindingContext = _viewmodel;と言うだけでは大したことではありません。
+0

回答ありがとうございます。スイッチングプラットフォームは、私が恐れていることです - 実際には私が求めていることです。 MVVMを使用すると、Viewの切り替えが簡単になり、Xamarin.FormsでPrismを使用するとこの可能性が制限されます。私は質問を編集するつもりです。 – raV720

+0

問題はありませんが、私は自分の答えを編集しますが、プリズムを使っていることは何ですか?なぜ私はViewModelでそれを持っていますか? autoviewmodelロケータ用ですか? – BraveHeart

+0

私はまだプリズムを使用していません。私はちょうどいくつかのプロジェクトで動作するようにmvvmフレームワークを選択しています。確かに私はナビゲーション、おそらくメッセージングセンター、prism.formsのautofac iocプラグイン、オートバインドビューとビューモデルを使用します(私が推測するようにautoviewmodelロケータ) – raV720

0

広告1:ビューはやや似ている与えられた、ビューモデルを移行することは簡単なはずです、コピー&ペーストプラス片付けアップ

広告2のおそらく問題:私はなるだろうそれが起こった場合は本当に驚いて、他の方法ラウンドは、より可能性があります参照してくださいthis comment on github

関連する問題