この質問は、PRISM 5.0とMVVMパターンに基づくWPFアプリケーションを指します。MVVMデザイン:ViewModelでMessageBoxをブロックする
ユーザが意思決定を行うときに、望ましくないまたは否定的な結果が生じることがありますが、実際に進んで進めたいのかどうかをユーザに尋ねることは非常に一般的です。例えば
: の一般的な方法の1つは、彼が本当にデータを削除したい場合は、削除後に復元することができないという、メッセージボックスをユーザーに依頼することです。
問題がある:私はViewModelに内部でメッセージボックスを呼び出す場合 、ViewModelには、外部からテスト不能になります。
//BAD!
public class ViewModel
{
public Boolean Delete()
{
//Blocking and therefore untestable in automatic UnitTests
MsgBoxResult result = MsgBox.Show("Do you really want to delete?");
if (result == yes) {//Do stuff that deletes data here;}
}
}
一つの可能性は、私の質問
//BETTER, BUT OK?
public class ViewModel
{
private void OnDeleteAction
{
MsgBoxResult result = MsgBox.Show("Do you really want to delete?");
if (result == yes) {Delete();}
}
public Boolean Delete()
{
//Testable from the outside again, because no blocking question
//Do stuff that deletes data here
}
パブリックメソッドを呼び出し、別のprivateメソッドに質問をする、次のようになります。はですが、これは良い方法です以上がありますViewModelの中でユーザに尋ねるエレガントな方法?私にヒントやリンクを教えてもらえますか?PRISM 5.0には最高のものは何ですか?
ViewModelでUI要素を使用するのではなく、ブロックするMessageBoxなどの処理をブロックしてから処理を続けることはできません。
ありがとうございました!
ビューモデル内の関連コードとビュー側のロジック関連コードを表示します。したがって、ビュー・コードの背後にあるメッセージ・ボックスを開き、ビュー・モデル・クラスでdeleteメソッドを呼び出したユーザーの選択に基づいて、メッセージ・ボックスを開くことができます。 –
'public interface MuhMessageBox {bool AreYouCrazy(文字列メッセージ); } ' – Will