私はあなたの条件ModelViewとViewModelと少し混同しています。 MVVMには、モデル、ビュー、およびビューモデルだけがあります。
この記事では、ユーザーの操作を待っている間にビルドサーバーをブロックせずに単体テストを実行できるように、メッセージボックスを抽象化しています。
実装ではFunc
デリゲートが使用されますが、インターフェイスを使用する場合と同じように簡単に行うことができます。次に、独自の列挙型を作成し、それをインタフェースのMessageBox実装用に変換する方法があります。
など。
public enum ConfirmationResult
{
Yes,
No,
Cancel
..etc
}
public enum ConfirmationType
{
YesNo,
OkCancel
..etc
}
public interface IConfirmation
{
ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
}
public class MessageBoxConfirmation : IConfirmation
{
ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
{
// convert ConfirmationType into MessageBox type here
// MessageBox.Show(...)
// convert result to ConfirmationResult type
}
}
あなたのビューモデルは、(例えば、そのコンストラクタで)依存関係としてIConfirmationを取るだろう、とユニットテストでは、あなたは常にShowConfirmationメソッドから特定の結果を返すためにIConfirmationインターフェイスをスタブすることができます。
また、私はそれを行うにはない理由が表示されない
画像などのオプション、ウィンドウのタイトルを提供するために、ShowConfirmationメソッドをオーバーロードできます。 ViewModelはModelとViewの「接着剤」です。したがって、ViewModelはView関連の型を知っているのは当然です。たとえば、ViewModelに背景色プロパティがある場合は、タイプはSolidColorBrushです。 Imho WPF列挙型の使用に間違いはありません。本当にそれが気に入らないのなら、MultibindingとIsXyzの2つのプロパティが別のアイデアです。 :) – dowhilefor
@dowhileforこれに感謝...私は以下のdevdigitalの答えが好きだと言わなければならないが、私は後で列挙型変換を使用するかもしれない。私はインターフェイスソリューションが好きです。 –