将业务逻辑状态消息发布到UI的一般方法?

时间:2010-03-12 20:48:38

标签: user-interface model view message status

我现在一直在努力解决这个问题,但我还没有得出结论。我通常不是UI程序员,所以请原谅noobishness。

我正在编写一个带有UI层(WPF)和业务层的典型应用程序。我想从业务层(可能深入业务层)向UI发布状态消息,但我不希望业务层具有任何 UI知识。是否有普遍接受的模式?

我想要有一个业务层发布状态消息的某种消息队列,并让UI的视图模型订阅该队列并拦截来自队列的消息并将它们路由到UI。这是一个好方法吗?还有其他地方我应该开始吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为这是一个很好的方法。我将为您的消息提供者创建一个接口,该接口在收到消息时发布事件(其中Message是您想要的消息类型):

public class MessageReceivedEventArgs : EventArgs
{
    public MessageReceivedEventArgs(Message message)
        : base()
    {
        Message = message;
    }

    public Message Message { get; set; }
}

public delegate void MessageRecievedHandler(object sender, MessageReceivedEventArgs e);

public interface IMessageProvider
{
    event MessageRecievedHandler MessageReceived;
    void Start();
    void Stop();
    bool IsRunning { get; }
}

public abstract class MessageProviderBase : IMessageProvider
{
    public event MessageRecievedHandler MessageReceived;

    public MessageProviderBase()
    {}

    protected void OnMessageReceived(MessageReceivedEventArgs e)
    {
        if (MessageReceived != null)
        {
            MessageReceived(this, e);
        }
    }

    public abstract void Start();
    public abstract void Stop();

    public abstract bool IsRunning { get; }
}