2012-02-10 6 views
0

にWPFの列挙型を防ぐために:どのように以下のURLで説明したように、私はメッセージボックスを示すのFUNC /ラムダメソッドを使用して私のアプリで現在のModelView

http://www.deanchalk.me.uk/post/WPF-MVVM-e28093-Simple-e28098MessageBoxShowe28099-With-Action-Func.aspx

メッセージボックスのテキストとキャプションを渡すことです問題はありませんが、イメージボックスイメージとイメージボックスタイプ(yes/noなど)も渡したいと思います。 WPFの列挙です。現在、これらの列挙型を非WPF(独自の)列挙型に変換するいくつかのメソッドを書いていますが、すべての値をコピーするのはちょっと面倒です。

ViewModelでWPF列挙型を使用することはできますか? (私はそう思わない)。そうでない場合、どのようにそれらを使用するのを防ぎ、それでもViewModelでそれらを選択できますか?

+1

画像などのオプション、ウィンドウのタイトルを提供するために、ShowConfirmationメソッドをオーバーロードできます。 ViewModelはModelとViewの「接着剤」です。したがって、ViewModelはView関連の型を知っているのは当然です。たとえば、ViewModelに背景色プロパティがある場合は、タイプはSolidColorBrushです。 Imho WPF列挙型の使用に間違いはありません。本当にそれが気に入らないのなら、MultibindingとIsXyzの2つのプロパティが別のアイデアです。 :) – dowhilefor

+0

@dowhileforこれに感謝...私は以下のdevdigitalの答えが好きだと言わなければならないが、私は後で列挙型変換を使用するかもしれない。私はインターフェイスソリューションが好きです。 –

答えて

3

私はあなたの条件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インターフェイスをスタブすることができます。

また、私はそれを行うにはない理由が表示されない

+0

答えてくれてありがとう、ModelViewはミスタイプだった(私はすでに私の質問でそれを編集した)。あなたのソリューションはさらに素晴らしいと思います。私はそれを確認する必要があります(私はしばらくの間ユニットテストを行いませんが、私はインターフェイスの使用法を試すことができます; lamda/func方法よりも見栄えが良い)。変換が常に必要であると推測します。 –

+0

私は単体テストを実装していませんが、解決策は良いようですので、私はすでにそれを受け入れました。 –

関連する問題