0

エラーまたは簡単なメッセージを UI に表示し、MVVM に違反することなく応答を受信するためのカスタム ダイアログを実装する方法を教えてください。私はこれをひどく必要としています。私を助けてください。

ありがとう、ザファル

4

2 に答える 2

3

あなたのコメントを参照して、 Messenger クラスをよく見ることを強くお勧めします。GalaSoft.MvvmLight.Messaging も提供します。この目的のためのDialogMessageタイプ。ただし、カスタムのものをサブクラス化することはできますGenericMessage<T>

次のようなメッセージを登録し、メッセージの到着時に何が起こるべきかを定義します。

Messenger.Default.Register<DialogMessage>(this,
    dm =>
    {
        MessageBox.Show(dm.Content, dm.Caption, dm.Button, dm.Icon);
    });

WeakReference ホールドしかありませんが、もう通知されたくない場合やビューが破棄された場合は、登録を解除する傾向があります。常に良き市民であること ;)

Messenger.Default.Unregister(this);

受信者にメッセージを送信し、必要に応じてコールバックを定義して、ダイアログの結果を取得します。

Messenger.Default.Send(new DialogMessage(this, "Content",
    result => Console.WriteLine(result.ToString()))
    {
        Caption = "Caption"
        Icon = MessageBoxImage.Asterisk,
        Button = MessageBoxButton.OK
    });
于 2013-04-03T09:00:59.790 に答える
0

mvvm パターン内であらゆる種類のダイアログを処理するには、一種のダイアログ サービスを使用する必要があります。この投稿では、このアプローチを使用するためのヒントをいくつか紹介します。

ダイアログをサービスに入れると、mvvm パターンは変更されません。このサービスは、ダイアログのすべての作成を処理し、結果を提供できます。ビューモデルは、メソッドを呼び出し、サービスによって提供されるイベントをサブスクライブするだけです。

この方法で問題を解決する良い方法は、User Interaction Patternsを使用することです。

MVVM パターンに関しては、ビュー モデルはユーザーとの対話を開始し、応答を消費して処理する役割を担いますが、ビューは適切なユーザー エクスペリエンスを使用してユーザーとの対話を実際に管理する役割を果たします。ビュー モデルに実装されたプレゼンテーション ロジックと、ビューによって実装されたユーザー エクスペリエンスの間の関心の分離を維持することは、テスト容易性と柔軟性の向上に役立ちます。

MVVM パターンでこの種のユーザー操作を実装するには、2 つの一般的な方法があります。1 つのアプローチは、ビュー モデルがユーザーとの対話を開始するために使用できるサービスを実装することです。これにより、ビューの実装に対する独立性が維持されます。別のアプローチでは、ビュー モデルによって発生するイベントを使用して、ユーザーと対話する意図を表現し、これらのイベントにバインドされ、対話の視覚的側面を管理するビュー内のコンポーネントを使用します。

これは、DialogServices などを実行するための MVVM パターンであるため、要件にも適合します。

于 2013-04-03T09:19:03.777 に答える