Example #1
0
 protected virtual void OnReplace(EventBinder binder, TContext oldContext)
 {
     OnDetach();
     OnAttach(binder);
 }
Example #2
0
 protected abstract void OnAttach(EventBinder binder);
Example #3
0
 protected override void OnAttach(EventBinder binder)
 {
     m_OnAttach(binder);
 }
Example #4
0
        protected override object GetProvidedValue()
        {
            var eventBinder = new EventBinder(this, GetEventHandlerType(), CreateBinding());

            return(eventBinder.GetEventHandler());
        }
Example #5
0
        private void SetupBindings(Element element, object model)
        {
            Debug.Assert(element != null);

            string bindings = (string)element.GetAttribute(Application.BindingsAttribute);

            bindings.ReplaceRegex(Application.BindingsRegex, delegate(string match /*, string binderType, string expressionType, string expressionValue */) {
                string binderType      = (string)Arguments.GetArgument(1);
                string expressionType  = (string)Arguments.GetArgument(2);
                string expressionValue = (string)Arguments.GetArgument(3);

                ExpressionFactory expressionFactory = _registeredExpressions[expressionType];
                Debug.Assert(expressionFactory != null, "Unknown expression of type '" + expressionType + "' found.");

                if (expressionFactory != null)
                {
                    Expression expression = expressionFactory(model, expressionType, expressionValue);
                    Binder binder         = null;

                    // TODO: Add support for binding attributes - @xxx

                    if (binderType.StartsWith("on."))
                    {
                        Debug.Assert(expression.CanChange == false, "Events cannot be bound to dynamic expressions.");
                        Debug.Assert(expression.GetValue() is Action);

                        binder = new EventBinder(element, binderType.Substr(3), (ElementEventListener)expression.GetValue());
                    }
                    else if (binderType.StartsWith("style."))
                    {
                        object style = element.Style;
                        binder       = new PropertyBinder(style, binderType.Substr(6), expression);
                    }
                    else
                    {
                        BinderFactory binderFactory = _registeredBinders[binderType];
                        if (binderFactory == null)
                        {
                            binder = new PropertyBinder(element, binderType, expression);
                        }
                        else
                        {
                            binder = binderFactory(element, binderType, expression);
                        }
                    }

                    if (binder != null)
                    {
                        binder.Update();
                        if (expression.CanChange == false)
                        {
                            // Since the expression value cannot change, there isn't a whole lot of need
                            // to keep the binder alive and manage it.
                            binder = null;
                        }
                    }

                    if (binder != null)
                    {
                        // The binder is managed using a behavior that is attached to the element.
                        // This allows stashing the model for later retrieval, as well as a way to
                        // dispose bindings (the behavior disposes all binders it is managing).

                        BinderManager binderManager = (BinderManager)Behavior.GetBehavior(element, typeof(BinderManager));
                        if (binderManager == null)
                        {
                            binderManager = new BinderManager();
                            binderManager.Initialize(element, null);
                            binderManager.Model = model;
                        }

                        binderManager.AddBinder(binder);
                    }
                }

                return(String.Empty);
            });
        }
Example #6
0
 protected internal static void RemoveHandler(EventBinder b, object delobj)
 {
     RemoveHandler(b.Target, b.Info, delobj);
 }
Example #7
0
 public RemoveHandlerCallable(EventBinder binder)
 {
     _Binder = binder;
 }
Example #8
0
 public AddHandlerCallable(EventBinder binder)
 {
     _Binder = binder;
 }
 public static EventBinder <TSaga, TMessage> UseNewId <TSaga, TMessage>(this EventBinder <TSaga, TMessage> binder)
 {
     return(binder.UseId(x => NewId.NextGuid()));
 }