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; } } } } }
public void BindCommand(string bindingObject, string eventName, string viewModelCommand) { ebs.Add(new EventBindingSettings() { BindingObject = bindingObject, EventName = eventName, ViewModelCommand = viewModelCommand, ResourceId = ControlUtil.GetResourceId(bindingObject) }); }
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 }); }
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; } } } } }
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 {} } } }
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; } } } } }