public EventBinder(DXEventExtension owner, Type eventHandlerType, BindingBase binding) { lock (locker) { this.errorHandler = owner.ErrorHandler; this.calculator = owner.Calculator; var target = (DependencyObject)owner.TargetProvider.TargetObject; this.targetObject = new WeakReference(target); this.eventHandlerType = eventHandlerType; var dataPropertyInfo = Tuple.Create(target.GetType(), owner.Handler); if (!propertiesCache.TryGetValue(dataPropertyInfo, out dataProperty)) { dataProperty = DependencyProperty.Register( "Tag" + dataPropertyIndex++.ToString(), typeof(object), dataPropertyInfo.Item1); propertiesCache[dataPropertyInfo] = dataProperty; } try { BindingOperations.SetBinding(target, dataProperty, binding); } catch (Exception e) { string message = "DXEvent cannot set binding on data property. " + Environment.NewLine + "Expr: " + owner.Handler + Environment.NewLine + "TargetProperty: " + owner.TargetPropertyName + Environment.NewLine + "TargetPropertyType: " + owner.TargetPropertyType.ToString() + Environment.NewLine + "TargetObjectType: " + target.GetType() + Environment.NewLine + "DataProperty: " + dataProperty.Name; throw new DXEventException(owner, message, e); } } }
protected override void Init() { TreeInfo = new EventTreeInfo(Handler, ErrorHandler); if (ActualResolvingMode == DXBindingResolvingMode.LegacyStaticTyping) { Calculator = new EventCalculator(TreeInfo); } else { Calculator = new EventCalculatorDynamic(TreeInfo); } Calculator.Init(TypeResolver); }