遅いことは承知していますが、次のメディエーターの実装を確認してください...
public sealed class Mediator
{
private static Mediator instance = null;
private volatile object locker = new object();
private MultiDictionary<ViewModelMessages, Action<Object>> internalList =
new MultiDictionary<ViewModelMessages, Action<object>>();
#region Constructors.
/// <summary>
/// Internal constructor.
/// </summary>
private Mediator() { }
/// <summary>
/// Static constructor.
/// </summary>
static Mediator() { }
#endregion
#region Properties.
/// <summary>
/// Instantiate the singleton.
/// </summary>
public static Mediator Instance
{
get
{
if (instance == null)
instance = new Mediator();
return instance;
}
}
#endregion
#region Public Methods.
/// <summary>
/// Registers a Colleague to a specific message.
/// </summary>
/// <param name="callback">The callback to use
/// when the message it seen.</param>
/// <param name="message">The message to
/// register to.</param>
public void Register(Action<Object> callback, ViewModelMessages message)
{
internalList.AddValue(message, callback);
}
/// <summary>
/// Notify all colleagues that are registed to the
/// specific message.
/// </summary>
/// <param name="message">The message for the notify by.</param>
/// <param name="args">The arguments for the message.</param>
public void NotifyColleagues(ViewModelMessages message, object args)
{
if (internalList.ContainsKey(message))
{
// forward the message to all listeners.
foreach (Action<object> callback in internalList[message])
callback(args);
}
}
#endregion
}
このクラスは、Dictionary<[enum], Action<T>>
仲介に a を使用します。このクラスは私が修正したものですが、元はここから取られました。MVVM と書いてありますが、他の実装で動作しない理由はありません。
これはシングルトン メディエーターであり、リンクされた記事に示されているように使用できます。
これがお役に立てば幸いです。返信が遅れて申し訳ありません。