using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; namespace OpenSEMI.ClientBase.Command { public class CommandParameter { public TCustomParameter CustomParameter { get; private set; } protected CommandParameter(TCustomParameter customParameter) { this.CustomParameter = customParameter; } public static CommandParameter Cast(object parameter) { var parameterToCast = parameter as CommandParameter; if (parameterToCast == null) { throw new InvalidCastException(string.Format("Failed to case {0} to {1}", parameter.GetType(), typeof(CommandParameter))); } var castedParameter = new CommandParameter( (TCustomParameter)parameterToCast.CustomParameter); return castedParameter; } } public class EventCommandParameter : CommandParameter where TEventArgs : RoutedEventArgs { public RoutedEvent RoutedEvent { get; private set; } public TEventArgs EventArgs { get; private set; } public EventCommandParameter( TCustomParameter customParameter, RoutedEvent routedEvent, TEventArgs eventArgs) : base(customParameter) { this.RoutedEvent = routedEvent; this.EventArgs = eventArgs; } public static new EventCommandParameter Cast(object parameter) { var parameterToCast = parameter as EventCommandParameter; if (parameterToCast == null) { throw new InvalidCastException(string.Format("Failed to case {0} to {1}", parameter.GetType(), typeof(EventCommandParameter))); } var castedParameter = new EventCommandParameter( (TCustomParameter)parameterToCast.CustomParameter, parameterToCast.RoutedEvent, (TEventArgs)parameterToCast.EventArgs); return castedParameter; } } public class PropertyCommandParameter : CommandParameter { public DependencyProperty Property { get; private set; } public TValue Value { get; private set; } public PropertyCommandParameter( TCustomParameter customParameter, DependencyProperty property, TValue value) : base(customParameter) { this.Property = property; this.Value = value; } public static new PropertyCommandParameter Cast(object parameter) { var parameterToCast = parameter as PropertyCommandParameter; if (parameterToCast == null) { throw new InvalidCastException(string.Format("Failed to case {0} to {1}", parameter.GetType(), typeof(PropertyCommandParameter))); } var castedParameter = new PropertyCommandParameter( (TCustomParameter)parameterToCast.CustomParameter, parameterToCast.Property, (TValue)parameterToCast.Value); return castedParameter; } } }