9

MVVMスタイルで書き込もうとしているWPFアプリケーションがあります。(ドキュメントを開いたときのように)例外がスローされた場合、MessageBoxを表示したいと思います。簡単に実行できますが、MessageBox.Show呼び出しがModelViewにあるため、コードが正しく感じられません。ある種のものがビューに存在することになっていると思いましたが、コードをビューに配置することは想定されていません。

それで、質問は本当にMVVMでMessageBoxを表示するための提案された方法に要約することができますか?

4

3 に答える 3

17

Use a service:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}

You have now decoupled your VMs from the presentation of messages. You may even decide not to use the standard (ugly) message boxes at all and that won't affect your VMs.

于 2009-08-26T18:41:03.850 に答える
9

Codeplexに関する Josh Smith の優れた MVVM Foundation をご覧ください。具体的には、お互いを認識する必要のないさまざまな ViewModel オブジェクト間でメッセージをやり取りする軽量な方法である Messenger クラスを見てください。

また、「ビューにコードを表示しない」という厳密な規則があるとは思いませんが、可能であれば避けるのが最善です... XAMLは宣言構文で記述された単なる.netコードであることを覚えておいてください; コード ビハインドは、それを補足するための単なる C# または VB.net です (絶対に必要な場合)。

于 2009-08-27T02:46:24.397 に答える
2

ビューがバインドできるViewModelクラスにErrorMessage文字列プロパティを配置することもできます。

于 2010-10-09T19:14:09.953 に答える