私はWPFアプリケーションでMVVMパターンを使用しており、包括的なユニットテストが可能です。 MVVMパターン自体はうまくいっていますが、私はWPFのデザイン時データサポートを使用できるという意味でパターンを適用するのに苦労しています。MVVMパターンでのWPFデザインデータの使用
Iは、ビューモデルのためにそう
public MyView(MyViewModel viewModel)
{
DataContext = viewModel;
}
依存性がそのように
public class MyViewModel
{
public MyViewModel(IFoo foo, IBar bar)
{
// ...
}
// Gets and sets the model represented in the view
public MyModel { get; set; }
// Read-only properties that the view data binds to
public ICollectionView Rows { get; }
public string Title { get; }
// Read-write properties are databound to the UI and are used to control logic
public string Filter { get; set; }
}
ように、コンストラクタに注入されるようにビューモデルのインスタンスは、一般に、ビューのコンストラクタに注入されるプリズムを使用しているよう
デザインデータを除いて、これは一般的には本当にうまくいきます。デザインデータ固有のクラスをリリースされたアセンブリにコンパイルすることを避けたいので、の代わりに{d:DesignData}
のアプローチを使用することにしましたアプローチですが、これを正しく機能させるには、ViewModelにパラメータのないコンストラクタが必要です。また、XAMLでこれらのプロパティを設定できるようにするために、セッターを持つか、変更可能なコレクションにするために、追加のプロパティを変更する必要があることがよくあります。
public class MyViewModel
{
public MyViewModel()
{
}
public MyViewModel(IFoo foo, IBar bar)
{
// ...
}
// Gets and sets the model represented in the view
public MyModel { get; set; }
// My read-only properties are no longer read-only
public ObservableCollection<Something> Rows { get; }
public string Title { get; set; }
public string Filter { get; set; }
}
これは私を心配されています
- 私が呼ばれることを意図されることはありませんパラメータなしのコンストラクタを持っており、ユニットではありませんが、その唯一のViewModel自体がすべきプロパティのセッターがあり
- をテスト呼び出す予定
- 私のViewModelは、ビューによって修正されるべきプロパティと、そうであってはならない混乱した混合物になっています。これにより、特定のプロパティを維持する責任を負うコードを一目で分かりやすくします。
- デザイン時に特定のプロパティを設定する(例:
Filter
テキストのスタイリングを見るために)実際にViewModelロジックを呼び出すことができます!妥協しない方法で、WPF MVVMアプリケーションでのデザイン時データを取得するためのより良い方法はあり
(ので、私のViewModelも設計時に不足しているそれ以外の場合は必須依存関係のtollerantする必要があります)私のこのようにViewModel?
また、ViewModelを別の方法で構築して、ロジックが別の場所に分かれたよりシンプルなプロパティを持つようにする必要があります。
あなたのVMがあなたの意見に依存していることは私にはちょっと変です。 –
@GregD、私にではありません。私はこのモデルを使ってデータを照会でき、ゲッター/セッターを公開して外部の "ビュー"に表示されるフラグを設定することができます。私は、この例ではビューを要求していないと言っていますが、起動する場合、各ビューモデルには保守画面、トランザクションヘッダー/ディテール処理などの目的があります。対応するビューがある場合は、このmvvmハンドラに関連付けられたビューを呼び出すようにしてください。 – DRapp
デザインタイムデータはこのアプローチでどのように機能しますか? – Justin