0

私は MVVM 設計モデルについてかなりよく理解していると思いますが、WPF、コマンド バインディング、およびそれらをどのように使用するつもりなのかに関して、私はそれについて不満を持っています。

コマンドを XAML に直接バインドするには、ViewModel 内に ICommand インターフェイスを実装する必要があります。現在、ICommand インターフェイスは PresentationCore.DLL の一部です。間違っている場合は、ベースの .NET フレームワークではなく WPF の一部です。

ViewModel と Model の要点は、完全に UI に依存しないことではないでしょうか? たとえば、ViewModel に ICommand を実装し、それをデータ コンテキストとして使用して XAML からコマンドをバインドする場合、ViewModel は WPF フレームワーク (特に PresentationCore.Dll) に依存しません。

つまり、たとえば Windows フォーム環境でモデルとビューモデルを使用しようとすると、WPF フレームワークではなく Windows フォームを使用しているため、PresentationCore.DLL を参照する必要はありません。 .

これは私には少し奇妙に思えます。ここで何か不足していますか? Model と ViewModel を UI と UI Framework から完全に独立させながら、XAML で Command バインディングを利用できるようにする別の方法はありますか?

前もって感謝します!

4

4 に答える 4

1

私の意見では、MVVM は WPF である Silverlight に自然に適合するため、非常に人気があります。XAML のデータ バインディングの概念により、DataContext という単一のプロパティを使用してビューとビューモデルをブリッジできます。ロジックがコントロールに結び付けられなくなるため、テスト容易性、設計コードの分離、保守性が向上します。MVVM パターンを他の場所にも実装できるかもしれませんが、WPF と Silverlight では、データとコマンド バインディングがサポートされているため、非常に簡単に適合します。私はどこかで、パターンを宗教的にとらないでくださいと読んだことがあります。それらは、あなたの生活をよりシンプルにするために作られています。Winforms の場合、より良いパターンがあると思います。ビジネス ロジックの再利用に重点を置いている場合は、

于 2012-07-14T06:54:11.133 に答える
1

これは .NET 4.5 比較で変更されました

于 2013-03-13T10:37:55.697 に答える
1

MVVM のポイントは、ビューを単なるビューにすることであり、それ以上のものではありません。ICommands をビュー モデルに配置すると、コードがビューから引き離されるため、これが役立ちます。問題が発生するのは、依存関係プロパティではないビュー上の何かにアクセスする必要がある場合です。これは、それにバインドできないことを意味します。

于 2012-07-14T06:20:48.953 に答える
1

私もこの種の問題を抱えていましたが、wpfではなくPOCOクラスでした。私がしたことは、2 つの異なるアセンブリに 2 つの部分クラスを作成したことです。VMプロジェクトでpresentationcore.dllに依存しない部分クラスを1つ作成し、ICommandのものを実装する別のアセンブリ(WPFVMなど)でその部分クラスを作成するように。Winforms の場合は VM プロジェクトの参照のみを View プロジェクトに追加し、WPF の場合は VM と WPFVM の両方の参照を View プロジェクトに追加します。これが役立つことを願っています。

于 2012-07-14T06:34:33.977 に答える