private static CommandWrapper GetCommandWrapperInstance(IDictionary <ICommand, CommandWrapper> commandWrappers, ICommand command, Dispatcher dispatcher) { lock (commandWrappers) { if (commandWrappers.ContainsKey(command)) { return(commandWrappers[command]); } else { CommandWrapper Wrapper = new CommandWrapper(command, dispatcher); commandWrappers.Add(command, Wrapper); return(Wrapper); } } }
/// <summary> /// Converts a value. /// </summary> /// <returns> /// A converted value. If the method returns null, the valid null value is used. /// </returns> /// <param name="value">The value produced by the binding source.</param><param name="targetType">The type of the binding target property.</param><param name="parameter">The converter parameter to use.</param><param name="culture">The culture to use in the converter.</param> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { object Command = value; if (Command == null) { return(null); } else if (Command is ICommand) { return(CommandWrapper.GetCommandWrapperInstance((ICommand)Command)); } else { throw new InvalidOperationException("Collection to wrap is either not enumerable or does not support INotifyCollectionChanged"); } }
public static CommandWrapper GetCommandWrapperInstance(ICommand command) { lock (CommandWrapper.commandWrappers) { Dispatcher CurrentDispatcher = Dispatcher.CurrentDispatcher; if (CommandWrapper.commandWrappers.ContainsKey(CurrentDispatcher)) { return(CommandWrapper.GetCommandWrapperInstance(CommandWrapper.commandWrappers[CurrentDispatcher], command, CurrentDispatcher)); } else { Dictionary <ICommand, CommandWrapper> CollectionWrappers = new Dictionary <ICommand, CommandWrapper>(); CommandWrapper.commandWrappers.Add(CurrentDispatcher, CollectionWrappers); return(CommandWrapper.GetCommandWrapperInstance(CollectionWrappers, command, CurrentDispatcher)); } } }