Exemple #1
0
        /// <summary>
        /// Creates the instance of the class and returns the <see cref="RoutedEventHandler"/> type delegate to the proxy method.
        /// </summary>
        /// <param name="desiredDelegateType">Desired type of a delegate.</param>
        /// <param name="methodName">The method name.</param>
        /// <param name="propertyName">Property type.</param>
        /// <returns>Delegate of the <see cref="RoutedEventHandler"/> type.</returns>
        public static object CreateProxyDelegate(Type desiredDelegateType, string methodName, string propertyName = null)
        {
            var  delInvoke    = desiredDelegateType.GetMethodInfo("Invoke");
            var  parms        = delInvoke.GetParameters();
            Type typeGenerate = parms[1].ParameterType;
            Type classType    = typeof(DataContextProxyRoutedEventHandlerGen <>);

            classType = classType.MakeGenericType(typeGenerate);
            var inst = Activator.CreateInstance(classType, methodName, propertyName);

            return(BindHelper.EventHandlerDelegateFromMethod("RoutedEventHandlerProxy", inst, desiredDelegateType));
        }
Exemple #2
0
        /// <summary>
        /// Represents the proxy method that will handle various routed events that do not
        /// have specific event data beyond the data that is common for all routed events.
        /// </summary>
        /// <param name="sender">The object which is the originator of the event.</param>
        /// <param name="e">The event data.</param>
        public void RoutedEventHandlerProxy(object sender, T e)
        {
            if ((_handler == null) && (!_errorInHandlerSetup))
            {
                // Try to get a proper handler
                var element = sender as DependencyObject;
                if (element != null)
                {
                    var sourceBaseProvided = BindHelper.LocateValidDependencyPropertyByAllTrees(element, FrameworkElement.DataContextProperty, _methodName, _propertyName);
                    if (sourceBaseProvided != null)
                    {
                        try
                        {
                            if (!string.IsNullOrEmpty(_methodName))
                            {
                                _handler = (ProxyEventHandler)BindHelper.EventHandlerDelegateFromMethod(_methodName, sourceBaseProvided, typeof(ProxyEventHandler));
                            }
                            if (!string.IsNullOrEmpty(_propertyName))
                            {
                                _handler = (ProxyEventHandler)BindHelper.EventHandlerDelegateFromProperty(_propertyName, sourceBaseProvided, typeof(ProxyEventHandler));
                            }
                        }
#if DEBUG
                        catch (Exception ex)
                        {
                            // Should cause an exception if binding was not resolved.
                            Debug.WriteLine($"Cannot create delegate: {_methodName}|{_propertyName} for {sourceBaseProvided} Exception: {ex.Message}");
#else
                        catch
                        {
#endif
                            _errorInHandlerSetup = true;
                        }
                    }
                }
            }
            if (_handler != null)
            {
                _handler(sender, e);
            }
        }