20 using System.Windows.Interactivity;
34 #region Public properties 40 #region TriggerAction overrides 47 protected override void Invoke(
object parameter)
50 dynamic content = null;
51 dynamic response = null;
54 content = args.Content;
55 response = args.Respond;
59 Logger.Warn(
"Invoke: Parameter is not a MessageArgsBase");
61 Invoke(content, response);
64 protected void Invoke<T>(T messageContent, Action response)
67 Content = messageContent;
69 Window view = CreateView();
72 if (viewModel != null)
74 EventHandler responseHandler = null;
75 responseHandler = (sender, e) =>
78 if (response != null) response();
81 if (view.DataContext == null)
87 Logger.Fatal(
"Invoke: Got view from CreateView() that already has a data context!");
88 Logger.Fatal(
"Invoke: Data context must be returned from GetDataContext() only!");
89 throw new InvalidOperationException(
"CreateView() must not create a view with a data context");
94 Logger.Info(
"Invoke: Did not get view model, cannot data bind view or set up event handlers");
96 if (view.DataContext != null)
98 Logger.Info(
"Invoke: View is data-bound to {0}", view.DataContext.GetType().FullName);
102 Logger.Info(
"Invoke: View has no data context");
108 Logger.Warn(
"Invoke: CreateView did not return a Window object!");
114 #region Virtual methods 125 Logger.Info(
"ShowView: Showing view as dialog");
126 view.ShowDialogInForm();
139 return messageContent;
144 #region Abstract methods 150 protected abstract Window CreateView();
156 private static NLog.Logger Logger {
get {
return _logger.Value; } }
158 private static readonly Lazy<
NLog.Logger> _logger =
new Lazy<
NLog.Logger>(() =>
NLog.LogManager.GetCurrentClassLogger());
Abstract base class for MVVM messaging actions.
Window InjectInto(Window view)
Injects the view model into an existing view by setting the view's DataContext.
EventHandler RequestCloseView
Raised by the CloseView Command, signals that associated views are to be closed.
virtual void ShowView(Window view)
Shows the view as a modal dialog.
Simple object that encapsulates a boolean value; to be used in MVVM interaction with MessageArgs...
virtual ViewModelBase GetDataContext(MessageContent messageContent)
Gets a ViewModelBase object that will be injected into the view In the abstract base class...
override void Invoke(object parameter)
Invokes the action by creating a view and a corresponding view model.