using System.Collections; using System.Windows; using Caliburn.Messaging; using Caliburn.Services; namespace Caliburn.Views { public class View { public static readonly DependencyProperty MessagesProperty = DependencyProperty.RegisterAttached("Messages", typeof(object), typeof(View), new PropertyMetadata(OnMessagesChanged)); public static void SetMessages(DependencyObject dependencyObject, object value) { AddMessages(dependencyObject, value); } private static void OnMessagesChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { if (e.NewValue != e.OldValue) AddMessages(dependencyObject, e.NewValue); } private static void AddMessages(DependencyObject source, object value) { IViewManager viewManager = DI.Resolve(); MessageBase message = value as MessageBase; if (message != null) viewManager.AddMessageSource(source, message); else { string actionName = value as string; if (actionName != null) { ActionMessage actionMessage = new ActionMessage(); actionMessage.Action = actionName; viewManager.AddMessageSource(source, actionMessage); } else { IEnumerable messages = value as IEnumerable; if (messages != null) { foreach (MessageBase m in messages) { viewManager.AddMessageSource(source, m); } } } } } } }