0

レイヤー間で通信する方法を説明するこの質問を見つけました。ただし、もう 1 つの側面があります。

次の例に示すように、インターフェイスを使用して BLL から UI にメッセージを送信するとします。

public interface IUiCallbacks
{
  void SendMessage(string message);
  void SendException(string message, Exception ex);
}

public class WinFormsUiCallbacks : IUiCallbacks
{
  public void SendMessage(string message)
  {
    MessageBox.Show(message);
  }

  public void SendException(string message, Exception ex)
  {
    MessageBox.Show(string.Format("Unfortunately, the following errror has occurred:{0}{1}", Environment.NewLine, ex.Message));
  }
}

public class OrderService
{
  private IUiCallbacks _iUiCallbacks;
  ...
  public OrderService() { ... }
  public OrderService(IUiCallbacks iUiCallbacks)
  {
    _iUiCallbacks = iUiCallbacks;
  }
  ...
  public void AddOrder(Order order)
  {
    ...
    if(OrderAlreadyExists(order))
    {
      if(_iUiCallbacks != null)
        _iUiCallbacks.SendMessage("The order can not be added, because it is already accepted.");
      return;
    }
    ...
  }
  ...
}

情報メッセージの代わりに、既存の注文の上書きを確認する確認ボックスが必要です。

この場合、確認ボックスの結果をどのように処理できますか?

ありがとう、アレックス

4

1 に答える 1

1

単純にSendMessageDialogResult を返し、必要なすべてのパラメータを追加します。

  public DialogResult SendMessage(string message, string caption, MessageBoxButtons buttons)
  {
    return MessageBox.Show(message, caption, buttons);
  }

そして、それを使用してください。

IUiCallbacks インターフェイスで DialogResult 型を参照したくない場合は、独自の DialogResult 型を作成し、WPF DialogResult と DialogResult の間でマップ (キャストなど) するコードを提供します。

In The Box MVVM Training のIDialogService を見ることができます。これは WPF + MVVM 用ですが (ところで、MVVM は素晴らしいパターンであり、学ぶ価値があります)、必要なものはすべて既に含まれています。

于 2012-04-04T13:23:53.360 に答える