20 using System.Collections.Generic;
23 using System.Windows.Input;
35 internal class CommandManagerHelper
37 internal static void CallWeakReferenceHandlers(List<WeakReference> handlers)
44 EventHandler[] callees =
new EventHandler[handlers.Count];
47 for (
int i = handlers.Count - 1; i >= 0; i--)
49 WeakReference reference = handlers[i];
50 EventHandler handler = reference.Target as EventHandler;
58 callees[count] = handler;
64 for (
int i = 0; i < count; i++)
66 EventHandler handler = callees[i];
67 handler(null, EventArgs.Empty);
72 internal static void AddHandlersToRequerySuggested(List<WeakReference> handlers)
76 foreach (WeakReference handlerRef
in handlers)
78 EventHandler handler = handlerRef.Target as EventHandler;
81 CommandManager.RequerySuggested += handler;
87 internal static void RemoveHandlersFromRequerySuggested(List<WeakReference> handlers)
91 foreach (WeakReference handlerRef
in handlers)
93 EventHandler handler = handlerRef.Target as EventHandler;
96 CommandManager.RequerySuggested -= handler;
102 internal static void AddWeakReferenceHandler(ref List<WeakReference> handlers, EventHandler handler)
104 AddWeakReferenceHandler(ref handlers, handler, -1);
107 internal static void AddWeakReferenceHandler(ref List<WeakReference> handlers, EventHandler handler,
int defaultListSize)
109 if (handlers == null)
111 handlers = (defaultListSize > 0 ?
new List<WeakReference>(defaultListSize) :
new List<WeakReference>());
114 handlers.Add(
new WeakReference(handler));
117 internal static void RemoveWeakReferenceHandler(List<WeakReference> handlers, EventHandler handler)
119 if (handlers != null)
121 for (
int i = handlers.Count - 1; i >= 0; i--)
123 WeakReference reference = handlers[i];
124 EventHandler existingHandler = reference.Target as EventHandler;
125 if ((existingHandler == null) || (existingHandler == handler))
129 handlers.RemoveAt(i);