using System; using System.Windows.Data; using System.Windows.Markup; using Caliburn.Events.Brokering; using Caliburn.Messaging; namespace Caliburn.MarkupExtensions { public class MessageExtension : MarkupExtension { #region Fields private string _action; private Parameter _parameter; private Publication _publication; private BindingBase _return; private object _trigger; #endregion #region Constructors public MessageExtension() {} public MessageExtension(string action) { _action = action; } #endregion #region Properties public object Trigger { get { return _trigger; } set { _trigger = value; } } public string Action { get { return _action; } set { _action = value; } } public Publication Publication { get { return _publication; } set { _publication = value; } } public BindingBase Return { get { return _return; } set { _return = value; } } public object ParamValue { set { if(_parameter == null) _parameter = new Parameter(); _parameter.Value = value; } } public Binding ParamBinding { set { if(_parameter == null) _parameter = new Parameter(); BindingOperations.SetBinding(_parameter, Parameter.ValueProperty, value); } } #endregion #region Overrides public override object ProvideValue(IServiceProvider serviceProvider) { MessageBase message; if(Publication != null) { EventMessage eventMessage = new EventMessage(); eventMessage.Publication = Publication; message = eventMessage; } else { ActionMessage actionMessage = new ActionMessage(); actionMessage.Action = Action; actionMessage.Return = Return; message = actionMessage; } message.Trigger = Trigger; if(_parameter != null) message.Parameters.Add(_parameter); return message; } #endregion } }