2016-09-08 9 views
1

現在、私はWPFでC#を学んでいます。私の主なアプローチは、可能な限りMVVMパターンを使用することですが、今はちょっと混乱しています。すべての私の意見は私のアプリケーションでViewModelを表示

私はのviewmodelを持っている:

private DruckviewViewModel ViewModel { get; set; } 

public Druckview() 
{ 
    ViewModel = new DruckviewViewModel(); 
    DataContext = ViewModel; 
    InitializeComponent(); 
} 

は、このビューにViewModelにを実装することが提案の方法であるか、またはそれを行うには良い方法がありますか?

+0

から完全にViewを隔離する必要が会うまでそのを続けるには、あなたが期待して働いて、このようですか? – Fabio

+0

WPFチャットルームで自由にお立ち寄りください。 MVVMをやっています。 http://chat.stackoverflow.com/rooms/18165/wpf –

+0

@Fabioはい、それはかなりうまくいきます。しかし、すべてのWebサイトには "ゼロコードビハインド"という言葉があるので、別の方法が必要だと思った。 –

答えて

1

MVVMはコードビハインドを意味しません。

MVVMは、懸念の分離のパターンです。 Modelは、ビジネスロジックを含むクラスである
Model
View
ViewModel

:それは、3つの部分(出現順)に、アプリケーションのアーキテクチャを分離するのに役立ちます。

Viewしか含まビュークラスを表します別のテキストボックスの色をコピーしたコードのみが、ビューのロジックが含まれていない限り、ボタンのクリックイベントハンドラに例えば((XAMLcode-behind)コードビハインドを持ってOKです関連ロジックを表示、これは当然のことながらXAMLで行うことができますが、ビューのMVVM観点から、それは重要ではありません)

ViewModelViewへの参照せずに閲覧者の行動を表しています。

Modelは何も知らない:Visibilityはビュー関連のタイプ

public Visibility MyVisibility { get; set; } 

あるのでMVVMのパーツ間の依存関係はこのように書きますので、たとえば、私の意見で、このプロパティは、MVVMパターンに違反することを
お知らせ
ViewModelは約Model
ViewViewModel

を知っている知っています ViewModelに囲まれた方法をしっかり

ビューは--->のViewModel --->MVVMを使用するためのモデル

私が思うには重要ではありません。 ViewModelのプロパティとコマンドを使用しているので、既にバインドされています。

(たとえば、インターフェイスをViewModelとして使用して)境界線を設定しないと、実際のビューなしでViewをテストすることができます。ViewModelたとえば、独自の「デザイン時」ビューモデルを作成します。あなたの現在のソリューションの作品の場合

とあなたのニーズを満たし、あなたはちょうどそのMVVMWPFから始まるあなたはViewModelの種類

1

これは動作しますが、MVVMパターンでは実際には当てはまりません。ビューがビューモデルに直接結びついているからです。

既存のMVVMフレームワークのほとんどは、View Managerという概念を使用しています。ビューモデルインスタンスからビューを作成し、それらを互いに接続し、ビューを表示するクラス。それはDruckviewViewModelDruckviewを使用していること、命名規則に基づいて、見つけ出すだろう

DruckviewViewModel vm = new DruckviewViewModel() 
ViewManager.Instance.DisplayViewFor(vm); 

:あなたはこのようなものに終わるだろう。それはビューを作成し、DataContextPropertyを設定し、ビューを可視にします。

これらのフレームワークを使用することなく、これは独自に構築する作業ですが、これは「ベストプラクティス」パターンとみなされます。

既存のフレームワークを使用することを検討したい場合は、その機能を比較する良いリストをhereで見つけることができます。


ところで、あなたはビューのコンストラクタでのDataContextを設定することなく、XAMLデザイナでインテリセンスを取得する方法を不思議に思っている場合。適切な方法は、このような属性を持つXAMLにデザインインスタンスを追加することです。

d:DataContext="{d:DesignInstance local:DruckviewViewModel}" 
+0

驚いたプリズムは、そのリストにはありません... –

+0

あなたの良い説明をありがとう私はいくつかを使用するつもりだと思うfr私はソフトウェア会社の研修生であり、コードを書く必要があるたびに、私の上司は「ちょっと、コードビハインドのためにMVVMパターンを考えている」のようなものです。 –

+1

'ViewModel'に束縛された' View'は 'MVVM'パターンとは関係ないと思います。なぜなら、' View'は少なくとも実行時に 'ViewModel'について知る必要があるからです。もちろん、この接続を緩和すると、Viewを設計してこれを使用する可能性が増します。 – Fabio

関連する問題