Esempio n. 1
0
        public static void RegisterBindingEvents <T> (this T obj, List <EventBindingSettings> ebs)
            where T : class, IHandlers
        {
            var iEvent = (IHandlers)obj;

            foreach (var prop in typeof(T).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
            {
                var pn = prop.Name;
                var pt = prop.PropertyType;

                if (ControlUtil.ActionDictionary.ContainsKey(pt.Name))
                {
                    var eventName = ControlUtil.ActionDictionary [pt.Name];
                    if (!ebs.Any(x => x.BindingObject == prop.Name && x.EventName == eventName))
                    {
                        ControlUtil.HookUIControl(prop.GetValue(obj), obj);
                    }
                }

                var ce = prop.GetCustomAttribute(typeof(RegisterEvent));
                if (ce != null)
                {
                    var ceObj = (RegisterEvent)ce;
                    foreach (var eventName in ceObj.EventNames)
                    {
                        var control = prop.GetValue(obj);
                        var evClick = control.GetType().GetEvent(eventName);
                        if (evClick != null)
                        {
                            var tDelegate = evClick.EventHandlerType;
                            var miHandler = typeof(T).GetMethod("ControlsHandler", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                            if (miHandler != null)
                            {
                                var             addHandler     = evClick.GetAddMethod();
                                var             d              = Delegate.CreateDelegate(tDelegate, obj, miHandler);
                                System.Object[] addHandlerArgs = { d };
                                addHandler.Invoke(control, addHandlerArgs);
                            }
                        }
                    }
                }
                var i = prop.PropertyType.GetInterface("INotifyPropertyChanged");
                if (i != null)
                {
                    var vm = (INotifyPropertyChanged)prop.GetValue(obj);
                    vm.PropertyChanged += iEvent.ViewEventHandler;
                    foreach (var vmProp in vm.GetType().GetProperties())
                    {
                        var ii = vmProp.PropertyType.GetInterface("INotifyCollectionChanged");
                        if (ii != null)
                        {
                            var collection = (INotifyCollectionChanged)vmProp.GetValue(vm);
                            collection.CollectionChanged += iEvent.ViewEventHandler;
                        }
                    }
                }
            }
        }
Esempio n. 2
0
 public void BindCommand(string bindingObject, string eventName, string viewModelCommand)
 {
     ebs.Add(new EventBindingSettings()
     {
         BindingObject    = bindingObject,
         EventName        = eventName,
         ViewModelCommand = viewModelCommand,
         ResourceId       = ControlUtil.GetResourceId(bindingObject)
     });
 }
Esempio n. 3
0
 public void BindProperty(string bindingObject, string bindingProperty, string eventName, string viewModelProperty, string format)
 {
     pbs.Add(new PropertyBindingSettings()
     {
         BindingObject     = bindingObject,
         BindingProperty   = bindingProperty,
         ViewModelProperty = viewModelProperty,
         EventName         = eventName,
         ResourceId        = ControlUtil.GetResourceId(bindingObject),
         Format            = format
     });
 }
Esempio n. 4
0
        public static void UnRegisterEvents <T>(this T obj)
            where T : UIViewController, IHandlers
        {
            var iEvent = (IHandlers)obj;

            foreach (var prop in typeof(T).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
            {
                var pn = prop.Name;
                var pt = prop.PropertyType;
                if (ControlUtil.ControlList.Contains(pt.Name))
                {
                    ControlUtil.UnHookUIControll(prop.GetValue(obj), obj);
                }
                var ce = prop.GetCustomAttribute(typeof(RegisterEvent));
                if (ce != null)
                {
                    var ceObj = (RegisterEvent)ce;
                    foreach (var eventName in ceObj.EventNames)
                    {
                        var control = prop.GetValue(obj);
                        var evClick = control.GetType().GetEvent(eventName);
                        if (evClick != null)
                        {
                            var tDelegate = evClick.EventHandlerType;
                            var miHandler = typeof(T).GetMethod("ControlsHandler", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                            if (miHandler != null)
                            {
                                var             addHandler     = evClick.GetRemoveMethod();
                                var             d              = Delegate.CreateDelegate(tDelegate, obj, miHandler);
                                System.Object[] addHandlerArgs = { d };
                                addHandler.Invoke(control, addHandlerArgs);
                            }
                        }
                    }
                }
                var i = prop.PropertyType.GetInterface("INotifyPropertyChanged");
                if (i != null)
                {
                    var vm = (INotifyPropertyChanged)prop.GetValue(obj);
                    vm.PropertyChanged -= iEvent.ViewEventHandler;
                    foreach (var vmProp in vm.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
                    {
                        var ii = vmProp.PropertyType.GetInterface("INotifyCollectionChanged");
                        if (ii != null)
                        {
                            var collection = (INotifyCollectionChanged)vmProp.GetValue(vm);
                            collection.CollectionChanged -= iEvent.ViewEventHandler;
                        }
                    }
                }
            }
        }
Esempio n. 5
0
 public static void CreateControls <T> (this T obj, DroidView view)
 {
     foreach (var prop in typeof(T).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
     {
         var pn = prop.Name;
         if (prop.PropertyType.IsSubclassOf(typeof(DroidView)))
         {
             try
             {
                 var resourceId = ControlUtil.GetResourceId(pn);
                 var ctrl       = view.FindViewById(resourceId);
                 prop.SetValue(obj, ctrl);
             }
             catch {}
         }
     }
 }
Esempio n. 6
0
        public static void RegisterEvents <T>(this T obj, List <EventBindingSettings> ebs)
            where T : UIViewController, IHandlers
        {
            var iEvent = (IHandlers)obj;

            foreach (var prop in typeof(T).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
            {
                var pn = prop.Name;
                var pt = prop.PropertyType;
                if (ControlUtil.ControlList.Contains(pt.Name))
                {
                    var ctrl = prop.GetValue(obj);
                    if (ctrl is UIControl)
                    {
                        ((UIControl)ctrl).AccessibilityIdentifier = prop.Name; //allows for TestCloud integration
                        ((UIControl)ctrl).AccessibilityLabel      = prop.Name;
                    }
                    if (!ebs.Any(x => x.BindingObject == pn))
                    {
                        ControlUtil.HookUIControl(ctrl, obj);
                    }
                }
                var ce = prop.GetCustomAttribute(typeof(RegisterEvent));
                if (ce != null)
                {
                    var ceObj = (RegisterEvent)ce;
                    foreach (var eventName in ceObj.EventNames)
                    {
                        var control = prop.GetValue(obj);
                        var evClick = control.GetType().GetEvent(eventName);
                        if (evClick != null)
                        {
                            var tDelegate = evClick.EventHandlerType;
                            var miHandler = typeof(T).GetMethod("ControlsHandler", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                            if (miHandler != null)
                            {
                                var             addHandler     = evClick.GetAddMethod();
                                var             d              = Delegate.CreateDelegate(tDelegate, obj, miHandler);
                                System.Object[] addHandlerArgs = { d };
                                addHandler.Invoke(control, addHandlerArgs);
                            }
                        }
                    }
                }
                var i = prop.PropertyType.GetInterface("INotifyPropertyChanged");
                if (i != null)
                {
                    var vm = (INotifyPropertyChanged)prop.GetValue(obj);
                    vm.PropertyChanged += iEvent.ViewEventHandler;
                    foreach (var vmProp in vm.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
                    {
                        var ii = vmProp.PropertyType.GetInterface("INotifyCollectionChanged");
                        if (ii != null)
                        {
                            var collection = (INotifyCollectionChanged)vmProp.GetValue(vm);
                            collection.CollectionChanged += iEvent.ViewEventHandler;
                        }
                    }
                }
            }
        }