public void CreateNotifiableMemberGenericTest()
        {
            string       value    = null;
            var          source   = new BindingSourceModel();
            const string path     = "path";
            Type         type     = typeof(string);
            var          property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, (info, o) => value,
                                                                                                              (info, o, v) =>
            {
                value = v;
                return(true);
            }, member: BindingSourceModel.IntPropertyInfo);

            property.Path.ShouldEqual(path);
            property.Type.ShouldEqual(type);
            property.CanRead.ShouldBeTrue();
            property.CanWrite.ShouldBeTrue();
            property.MemberType.ShouldEqual(BindingMemberType.Attached);
            property.Member.ShouldEqual(BindingSourceModel.IntPropertyInfo);

            property.GetValue(source, null).ShouldBeNull();
            property.SetValue(source, new object[] { path });
            property.GetValue(source, null).ShouldEqual(path);
            value.ShouldEqual(path);
        }
 public static void RegisterStringElementMembers()
 {
     BindingBuilderExtensions.RegisterDefaultBindingMember <StringElement>(nameof(StringElement.Value));
     MemberProvider.Register(AttachedBindingMember.CreateMember <StringElement, string>(nameof(StringElement.Value),
                                                                                        (info, element) => element.Value,
                                                                                        (info, element, arg3) =>
     {
         element.Value = arg3;
         element.Reload();
     }));
     MemberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.StringElement.TappedEvent,
                                                               (info, element, arg3) =>
     {
         var weakWrapper          = arg3.ToWeakWrapper();
         IDisposable unsubscriber = null;
         Action action            = () =>
         {
             if (!weakWrapper.EventListener.TryHandle(weakWrapper.EventListener, EventArgs.Empty))
             {
                 unsubscriber.Dispose();
             }
         };
         unsubscriber = WeakActionToken.Create(element, action,
                                               (stringElement, nsAction) => stringElement.Tapped -= nsAction);
         element.Tapped += action;
         return(unsubscriber);
     }));
 }
 public static void RegisterCollectionViewCellMembers()
 {
     BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateMember <UICollectionViewCell, bool?>(nameof(UICollectionViewCell.Selected),
                                                                                                                     (info, target) => CollectionViewSourceBase.CellMediator.GetMediator(target, true).SelectedBind,
                                                                                                                     (info, cell, arg3) => CollectionViewSourceBase.CellMediator.GetMediator(cell, true).SelectedBind = arg3,
                                                                                                                     (info, cell, arg3) => CollectionViewSourceBase.CellMediator.GetMediator(cell, true).AddWithUnsubscriber(arg3)));
 }
 public static void RegisterSegmentedControlMembers()
 {
     BindingBuilderExtensions.RegisterDefaultBindingMember <UISegmentedControl>(nameof(UISegmentedControl.SelectedSegment));
     MemberProvider.Register(AttachedBindingMember.CreateMember <UISegmentedControl, int>(nameof(UISegmentedControl.SelectedSegment),
                                                                                          (info, control) => (int)control.SelectedSegment,
                                                                                          (info, control, arg3) => control.SelectedSegment = arg3, nameof(UISegmentedControl.ValueChanged)));
 }
 public static void RegisterSplitViewControllerMembers()
 {
     MemberProvider.Register(AttachedBindingMember.CreateNotifiableMember(AttachedMembers.UISplitViewController.MasterView,
                                                                          (info, controller) =>
     {
         if (controller.ViewControllers.Length == 2)
         {
             return(controller.ViewControllers[0]);
         }
         return(null);
     }, (info, controller, arg3) =>
     {
         UpdateMasterDetailController(controller, arg3, true);
         return(true);
     }));
     MemberProvider.Register(AttachedBindingMember.CreateNotifiableMember(AttachedMembers.UISplitViewController.DetailView,
                                                                          (info, controller) =>
     {
         if (controller.ViewControllers.Length == 2)
         {
             return(controller.ViewControllers[1]);
         }
         return(null);
     }, (info, controller, arg3) =>
     {
         UpdateMasterDetailController(controller, arg3, false);
         return(true);
     }));
 }
示例#6
0
 public static void RegisterToolbarMembers()
 {
     //Toolbar
     MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.View.MenuTemplate.Override <Toolbar>(), ToolbarMenuTemplateChanged));
     MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.IsActionBar,
                                                                      ToolbarIsActionBarChanged));
 }
        protected override void OnInit()
        {
            BindingServiceProvider.SetDefaultValues();
            BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateMember <object, object>(AttachedMemberConstants.AsErrorsSource,
                                                                                                               (info, o) => BindingConstants.ErrorsSourceValue, null));
            BindingServiceProvider.ValueConverter = BindingConverterExtensions.Convert;
            base.OnInit();
            if (ValueConverterEx == null)
            {
                //to invoke static constructor.
#if NETFX_CORE
                new UwpDataBindingModule();
#else
                new WpfDataBindingModule();
#endif
                ValueConverterEx = BindingServiceProvider.ValueConverter;
            }
            else
            {
                BindingServiceProvider.ValueConverter = ValueConverterEx;
            }
            ThreadManager.ImmediateInvokeAsync           = true;
            ThreadManager.ImmediateInvokeOnUiThreadAsync = true;
            ThreadManager.ImmediateInvokeOnUiThread      = true;
        }
 static BindingExtensions()
 {
     EmptyListener        = new WeakEventListener();
     AttachedParentMember = AttachedBindingMember.CreateAutoProperty <object, object>("#" + AttachedMemberConstants.Parent);
     NullValue            = new object[] { null };
     MergePathDelegate    = MergePath;
 }
示例#9
0
        private static void RegisterMembers(IBindingMemberProvider memberProvider)
        {
#if !APPCOMPAT
            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.AddToBackStack));
#endif
        }
        private static void RegisterCollectionViewMembers(IBindingMemberProvider memberProvider)
        {
            BindingServiceProvider.ResourceResolver.AddType("UICollectionViewScrollPosition", typeof(UICollectionViewScrollPosition));
            BindingServiceProvider.ResourceResolver.AddType("UICollectionViewScrollDirection", typeof(UICollectionViewScrollDirection));

            BindingServiceProvider.BindingMemberPriorities[CollectionViewUseAnimationsMember.Path]  = 1;
            BindingServiceProvider.BindingMemberPriorities[CollectionViewScrollPositionMember.Path] = 1;

            //UICollectionView
            memberProvider.Register(CollectionViewUseAnimationsMember);
            memberProvider.Register(CollectionViewScrollPositionMember);
            memberProvider.Register(CollectionViewSelectedItemChangedEvent);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UICollectionView, IEnumerable>(AttachedMemberConstants.ItemsSource, CollectionViewItemsSourceChanged));
            memberProvider.Register(AttachedBindingMember.CreateMember <UICollectionView, object>(AttachedMemberConstants.SelectedItem,
                                                                                                  GetCollectionViewSelectedItem, SetCollectionViewSelectedItem, (info, view, arg3) => (IDisposable)CollectionViewSelectedItemChangedEvent.SetValue(view, arg3)));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UICollectionView, ICollectionCellTemplateSelector>(
                                        AttachedMemberConstants.ItemTemplate,
                                        (view, args) =>
            {
                if (args.NewValue != null)
                {
                    args.NewValue.Initialize(view);
                }
            }));

            //UICollectionViewCell
            memberProvider.Register(CollectionViewCellSelectedMember);
            memberProvider.Register(CollectionViewCellHighlightedMember);
            memberProvider.Register(CollectionViewCellShouldHighlightMember);
            memberProvider.Register(CollectionViewCellShouldDeselectMember);
            memberProvider.Register(CollectionViewCellShouldSelectMember);
        }
示例#11
0
        static PlatformDataBindingModule()
        {
            AddViewValue    = new object();
            RemoveViewValue = new object[] { null };
            //Menu
            MenuItemsSourceMember   = AttachedBindingMember.CreateAutoProperty <IMenu, IEnumerable>(AttachedMemberConstants.ItemsSource, MenuItemsSourceChanged);
            IsCheckedMenuItemMember = AttachedBindingMember.CreateNotifiableMember <IMenuItem, bool>("IsChecked",
                                                                                                     (info, item) => item.IsChecked, (info, item, value) =>
            {
                if (value == item.IsChecked)
                {
                    return(false);
                }
                item.SetChecked(value);
                return(true);
            });
#if !API8
            MenuItemActionViewMember = AttachedBindingMember
                                       .CreateNotifiableMember <IMenuItem, object>("ActionView", (info, item) => item.GetActionView(), MenuItemUpdateActionView);
            MenuItemActionViewSelectorMember = AttachedBindingMember
                                               .CreateAutoProperty <IMenuItem, IDataTemplateSelector>("ActionViewTemplateSelector", (o, args) => RefreshValue(o, MenuItemActionViewMember));

            MenuItemActionProviderMember = AttachedBindingMember
                                           .CreateNotifiableMember <IMenuItem, object>("ActionProvider", (info, item) => item.GetActionProvider(), MenuItemUpdateActionProvider);
            MenuItemActionProviderSelectorMember = AttachedBindingMember
                                                   .CreateAutoProperty <IMenuItem, IDataTemplateSelector>("ActionProviderTemplateSelector", (o, args) => RefreshValue(o, MenuItemActionProviderMember));

            AddToBackStackMember = AttachedBindingMember.CreateAutoProperty <ViewGroup, bool>("AddToBackStack");
#endif
            //ViewGroup
            ContentMember = AttachedBindingMember
                            .CreateAutoProperty <ViewGroup, object>(AttachedMemberConstants.Content, ContentMemberChanged, ContentMemberAttached);
            ContentTemplateIdMember = AttachedBindingMember
                                      .CreateAutoProperty <ViewGroup, int?>(AttachedMemberConstants.ContentTemplate, ContentTemplateIdChanged);
            ContentTemplateSelectorMember = AttachedBindingMember
                                            .CreateAutoProperty <ViewGroup, IDataTemplateSelector>(AttachedMemberConstants.ContentTemplateSelector, ContentTemplateSelectorChanged);

            //AdapterView
            AdapterViewSelectedPositionMember =
                AttachedBindingMember.CreateAutoProperty <AdapterView, int>("SelectedItemPosition",
                                                                            AdapterViewSelectedItemPositionChanged, AdapterViewSelectedMemberAttached, (view, info) => view.SelectedItemPosition);
            AdapterViewSelectedItemMember = AttachedBindingMember.CreateAutoProperty <AdapterView, object>(
                AttachedMemberConstants.SelectedItem, AdapterViewSelectedItemChanged);
            ScrollToSelectedItemMember = AttachedBindingMember.CreateAutoProperty <AdapterView, bool>("ScrollToSelectedItem");

            //TabHost
            TabHostSelectedItemMember = AttachedBindingMember.CreateAutoProperty <TabHost, object>(AttachedMemberConstants.SelectedItem, TabHostSelectedItemChanged);

#if !API8
            //Action bar
            ActionBarItemsSourceMember  = AttachedBindingMember.CreateAutoProperty <ActionBar, IEnumerable>(AttachedMemberConstants.ItemsSource, (bar, args) => ActionBarUpdateItemsSource(bar));
            ActionBarSelectedItemMember = AttachedBindingMember.CreateAutoProperty <ActionBar, object>(AttachedMemberConstants.SelectedItem, ActionBarSelectedItemChanged);
            //Context action bar
            ActionBarContextActionBarTemplateMember = AttachedBindingMember.CreateAutoProperty <ActionBar, int?>("ContextActionBarTemplate");
            ActionBarContextActionBarVisibleMember  = AttachedBindingMember.CreateAutoProperty <ActionBar, bool>("ContextActionBarVisible", ActionBarContextActionBarVisibleChanged);

            //ActioBar.Tab
            ActionBarTabContentMember = AttachedBindingMember.CreateAutoProperty <ActionBar.Tab, object>(AttachedMemberConstants.Content);
#endif
        }
        public void CreateEventMemberAttachTest()
        {
            bool           isInvoked = false;
            var            source    = new BindingSourceModel();
            IEventListener listener  = new EventListenerMock();
            const string   path      = "path";
            var            property  = AttachedBindingMember.CreateEvent(path, (info, o, arg3) => null,
                                                                         (model, args) =>
            {
                model.ShouldEqual(source);
                args.ShouldNotBeNull();
                isInvoked = true;
            });

            property.SetValue(source, new object[] { listener });
            isInvoked.ShouldBeTrue();

            isInvoked = false;
            property.SetValue(source, new object[] { null });
            isInvoked.ShouldBeFalse();

            source = new BindingSourceModel();
            property.SetValue(source, new object[] { listener });
            isInvoked.ShouldBeTrue();
        }
        public void CreateNotifiableMemberGenericObserveTest()
        {
            bool isInvoked    = false;
            bool raiseEvent   = true;
            var  listenerMock = new EventListenerMock
            {
                Handle = (o, o1) => isInvoked = true
            };
            var          source   = new BindingSourceModel();
            const string path     = "path";
            var          property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, (info, o) => null,
                                                                                                              (info, o, v) => raiseEvent);

            IDisposable subscriber = property.TryObserve(source, listenerMock);

            property.SetValue(source, new object[] { path });
            isInvoked.ShouldBeTrue();
            subscriber.ShouldNotBeNull();

            raiseEvent = false;
            isInvoked  = false;
            property.SetValue(source, new object[] { path });
            isInvoked.ShouldBeFalse();

            raiseEvent = true;
            isInvoked  = false;
            property.SetValue(source, new object[] { null });
            isInvoked.ShouldBeTrue();

            subscriber.Dispose();
            isInvoked = false;
            property.SetValue(source, new object[] { path });
            isInvoked.ShouldBeFalse();
        }
        public void CreateNotifiableMemberGenericSetterTest()
        {
            object       value    = null;
            var          source   = new BindingSourceModel();
            const string path     = "path";
            Type         type     = typeof(string);
            var          property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, null, (info, o, v) =>
            {
                info.ShouldNotBeNull();
                o.ShouldEqual(source);
                v.ShouldEqual(path);
                value = v;
                return(true);
            });

            property.Path.ShouldEqual(path);
            property.Type.ShouldEqual(type);
            property.CanRead.ShouldBeFalse();
            property.CanWrite.ShouldBeTrue();
            property.MemberType.ShouldEqual(BindingMemberType.Attached);

            property.SetValue(source, new object[] { path });
            value.ShouldEqual(path);
            ShouldThrow(() => property.GetValue(source, null));
        }
示例#15
0
        public static void RegisterControlMembers()
        {
            var sizeChanged = MemberProvider.GetBindingMember(typeof(Control), nameof(Control.SizeChanged), true, false);

            if (sizeChanged != null)
            {
                MemberProvider.Register(typeof(Control), "WidthChanged", sizeChanged, true);
                MemberProvider.Register(typeof(Control), "HeightChanged", sizeChanged, true);
            }
            MemberProvider.Register(AttachedBindingMember
                                    .CreateMember <Control, object>(AttachedMemberConstants.FindByNameMethod, FindByNameControlMember));
            MemberProvider.Register(AttachedBindingMember
                                    .CreateMember <Control, bool>(AttachedMemberConstants.Focused, (info, control) => control.Focused,
                                                                  (info, control, arg3) =>
            {
                if (arg3)
                {
                    control.Focus();
                }
            }, nameof(Control.LostFocus)));

            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.Control.Content, ContentChanged));
            var contenMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.Control.ContentTemplateSelector, ContentTemplateChanged);

            MemberProvider.Register(contenMember);
            MemberProvider.Register(typeof(Control), AttachedMemberConstants.ContentTemplate, contenMember, true);
        }
        private static void RegisterViewMembers(IBindingMemberProvider memberProvider)
        {
            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, int>(AttachedMemberNames.MenuTemplate));

#if !API8
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, int>(AttachedMemberNames.PopupMenuTemplate));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>(AttachedMemberNames.PopupMenuEvent, PopupMenuEventChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>(AttachedMemberNames.PlacementTargetPath));
#endif
            memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.Parent, GetViewParentValue, null, ObserveViewParent));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.FindByNameMethod, ViewFindByNameMember));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>(AttachedMemberConstants.Focused,
                                                                                    (info, view) => view.IsFocused, null, "FocusChange"));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>(AttachedMemberConstants.Enabled,
                                                                                    (info, view) => view.Enabled, (info, view, value) => view.Enabled = value));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, ViewStates>("Visibility",
                                                                                          (info, view) => view.Visibility, (info, view, value) => view.Visibility = value,
                                                                                          ObserveViewVisibility));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>("Visible",
                                                                                    (info, view) => view.Visibility == ViewStates.Visible,
                                                                                    (info, view, value) => view.Visibility = value ? ViewStates.Visible : ViewStates.Gone,
                                                                                    ObserveViewVisibility));
            memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>("Hidden",
                                                                                    (info, view) => view.Visibility != ViewStates.Visible,
                                                                                    (info, view, value) => view.Visibility = value ? ViewStates.Gone : ViewStates.Visible,
                                                                                    ObserveViewVisibility));
        }
示例#17
0
 public static void RegisterDataGridViewMembers()
 {
     BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Object.ItemsSource.Override <DataGridView>());
     MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.Object.ItemsSource.Override <DataGridView>(),
                                                                (info, view) => view.DataSource as IEnumerable, (info, view, value) =>
     {
         view.DataSource = value;
         view.Refresh();
     }, nameof(DataGridView.DataSourceChanged)));
     MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.DataGridView.SelectedItem,
                                                                GetSelectedItemDataGridView, SetSelectedItemDataGridView, (info, view, arg3) =>
     {
         arg3 = arg3.ToWeakEventListener();
         EventHandler handler = null;
         handler = (sender, args) =>
         {
             var gridView = (DataGridView)sender;
             Action <DataGridView, IEventListener, EventHandler> action =
                 (dataGridView, listener, eventHandler) =>
             {
                 if (!listener.TryHandle(dataGridView, EventArgs.Empty))
                 {
                     dataGridView.CurrentCellChanged -= eventHandler;
                 }
             };
             //To prevent this exception 'Operation not valid because it results in a reentrant call to the SetCurrentCellAddressCore function'
             gridView.BeginInvoke(action, gridView, arg3, handler);
         };
         view.CurrentCellChanged += handler;
         return(WeakActionToken.Create(view, handler,
                                       (gridView, eventHandler) => gridView.CurrentCellChanged -= eventHandler));
     }));
 }
 static AttachedMembersRegistration()
 {
     DebbugerAttached         = Debugger.IsAttached;
     ExplicitParentTypes      = new HashSet <Type>();
     CommandParameterInternal = AttachedBindingMember.CreateAutoProperty <object, object>("~#@cmdparam");
     AttachedParentMember     = AttachedBindingMember.CreateAutoProperty <object, ParentValue>("#" + AttachedMemberConstants.Parent);
 }
        public void BindingTargetShouldUseDelegateIsEnabledProperty()
        {
            bool isEnabled = false;
            IAttachedBindingMemberInfo <object, bool> member =
                AttachedBindingMember.CreateMember <object, bool>(AttachedMemberConstants.Enabled,
                                                                  (info, o) => isEnabled,
                                                                  (info, o, v) => isEnabled = v);
            var memberProvider = new BindingMemberProvider();

            memberProvider.Register(typeof(object), member, false);
            BindingServiceProvider.MemberProvider = memberProvider;

            var mock = new ObserverMock {
                PathMembers = new BindingPathMembersMock(new object(), BindingPath.Empty)
            };
            var bindingTarget = (BindingTarget)CreateBindingSource(mock);

            bindingTarget.IsEnabled.ShouldBeFalse();
            bindingTarget.IsEnabled = true;
            isEnabled.ShouldBeTrue();
            bindingTarget.IsEnabled.ShouldBeTrue();

            bindingTarget.IsEnabled = false;
            isEnabled.ShouldBeFalse();
            bindingTarget.IsEnabled.ShouldBeFalse();
        }
        public static void RegisterVisualElementMembers()
        {
            var visibleMember = MemberProvider.GetBindingMember(typeof(VisualElement), nameof(VisualElement.IsVisible), true, false);

            if (visibleMember != null)
            {
                MemberProvider.Register(typeof(VisualElement), AttachedMembers.VisualElement.Visible, visibleMember, true);
                MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.VisualElement.Hidden,
                                                                           (info, element) => !element.IsVisible, (info, element, arg3) => element.IsVisible = !arg3,
                                                                           (info, element, arg3) => visibleMember.TryObserve(element, arg3)));
            }
            MemberProvider.Register(AttachedBindingMember
                                    .CreateMember <VisualElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));

            MemberProvider.Register(AttachedBindingMember.CreateMember <VisualElement, bool>(AttachedMemberConstants.Focused, (info, element) => element.IsFocused,
                                                                                             (info, element, arg3) =>
            {
                if (arg3)
                {
                    element.Focus();
                }
                else
                {
                    element.Unfocus();
                }
            }, (info, element, arg3) => BindingServiceProvider.WeakEventManager.Subscribe(element, nameof(VisualElement.IsFocused), arg3)));

            var enabledMember = MemberProvider.GetBindingMember(typeof(VisualElement), nameof(VisualElement.IsEnabled), true, false);

            if (enabledMember != null)
            {
                MemberProvider.Register(typeof(VisualElement), AttachedMemberConstants.Enabled, enabledMember, true);
            }
        }
        private static void RegisterDialogMembers(IBindingMemberProvider memberProvider)
        {
            memberProvider.Register(AttachedBindingMember.CreateMember <Element, object>(AttachedMemberConstants.Parent,
                                                                                         (info, element) => element.Parent ?? BindingExtensions.AttachedParentMember.GetValue(element, null),
                                                                                         (info, element, arg3) => BindingExtensions.AttachedParentMember.SetValue(element, arg3),
                                                                                         (info, element, arg3) => BindingExtensions.AttachedParentMember.TryObserve(element, arg3)));

            IBindingMemberInfo member = memberProvider.GetBindingMember(typeof(EntryElement), "Changed", true, false);

            if (member != null)
            {
                memberProvider.Register(AttachedBindingMember.CreateEvent <EntryElement>("ValueChanged",
                                                                                         (info, element, arg3) => member.TryObserve(element, arg3)));
            }

            memberProvider.Register(AttachedBindingMember.CreateEvent <StringElement>("Tapped",
                                                                                      (info, element, arg3) =>
            {
                var weakWrapper          = arg3.ToWeakWrapper();
                IDisposable unsubscriber = null;
                NSAction action          = () =>
                {
                    if (!weakWrapper.EventListener.TryHandle(weakWrapper.EventListener, EventArgs.Empty))
                    {
                        unsubscriber.Dispose();
                    }
                };
                unsubscriber = WeakActionToken.Create(element, action,
                                                      (stringElement, nsAction) => stringElement.Tapped -= nsAction);
                element.Tapped += action;
                return(unsubscriber);
            }));
        }
示例#22
0
 protected override bool LoadInternal()
 {
     BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, bool>("IsBusy", IsBusyChanged));
     BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>("BusyMessage", BusyMessageChanged));
     IocContainer.BindToConstant <IRepository>(new FileRepository());
     return(true);
 }
 public static void RegisterButtonMembers()
 {
     BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIControl.ClickEvent.Override <UIButton>());
     MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIButton.Title,
                                                                (info, button) => button.CurrentTitle,
                                                                (info, button, arg3) => button.SetTitle(arg3, UIControlState.Normal)));
 }
        public void ProviderShouldRegisterUnregisterAndResolveAttachedMemberMulti()
        {
            const int    count      = 10;
            const string memberPath = "Test";
            var          targetType = typeof(object);
            var          members    = new List <IBindingMemberInfo>();
            var          provider   = CreateMemberProvider();

            for (int i = 0; i < count; i++)
            {
                var memberInfo = AttachedBindingMember.CreateAutoProperty(memberPath + i, typeof(object));
                provider.GetBindingMember(targetType, memberPath + i, false, false).ShouldBeNull();
                members.Add(memberInfo);
                provider.Register(targetType, memberInfo, false);
            }

            for (int i = 0; i < count; i++)
            {
                provider.GetBindingMember(targetType, memberPath + i, false, false)
                .ShouldEqual(members[i]);
            }
            provider.Unregister(targetType);
            for (int i = 0; i < count; i++)
            {
                provider.GetBindingMember(targetType, memberPath + i, false, false)
                .ShouldBeNull();
            }
        }
        public static void RegisterDialogEntryElementMembers()
        {
            var field = typeof(EntryElement).GetField("entry", BindingFlags.NonPublic | BindingFlags.Instance);

            if (field != null && field.FieldType == typeof(UITextField))
            {
                var getEntryField = ServiceProvider.ReflectionManager.GetMemberGetter <UITextField>(field);
                TouchBindingErrorProvider.TryGetEntryField = target =>
                {
                    var element = target as EntryElement;
                    if (element != null)
                    {
                        target = getEntryField(element);
                    }
                    return(target);
                };
            }

            BindingBuilderExtensions.RegisterDefaultBindingMember <EntryElement>(nameof(EntryElement.Value));
            var member = MemberProvider.GetBindingMember(typeof(EntryElement), nameof(EntryElement.Changed), true, false);

            if (member != null)
            {
                MemberProvider.Register(AttachedBindingMember.CreateEvent <EntryElement>("ValueChanged",
                                                                                         (info, element, arg3) => member.TryObserve(element, arg3)));
            }
        }
        public void ProviderShouldSelectTheBestMember2()
        {
            const string path       = "Test";
            var          baseType   = typeof(IInterface);
            var          parentType = typeof(BaseClass);
            var          targetType = typeof(Class);
            var          provider   = CreateMemberProvider();

            var baseMember   = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null);
            var parentMember = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null);
            var targetMember = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null);

            provider.Register(baseType, baseMember, false);
            provider.Register(parentType, parentMember, false);
            provider.Register(targetType, targetMember, false);

            provider.GetBindingMember(targetType, path, false, false).ShouldEqual(targetMember);
            provider.GetBindingMember(parentType, path, false, false).ShouldEqual(parentMember);
            provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember);

            provider.Unregister(targetType, path);
            provider.GetBindingMember(targetType, path, false, false).ShouldEqual(parentMember);
            provider.GetBindingMember(parentType, path, false, false).ShouldEqual(parentMember);
            provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember);

            provider.Unregister(parentType, path);
            provider.GetBindingMember(targetType, path, false, false).ShouldEqual(baseMember);
            provider.GetBindingMember(parentType, path, false, false).ShouldEqual(baseMember);
            provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember);
        }
        public static void RegisterTableViewMembers()
        {
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewRowAnimation));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewScrollPosition));

            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.UseAnimations]    = BindingServiceProvider.TemplateMemberPriority + 1;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.AddAnimation]     = BindingServiceProvider.TemplateMemberPriority + 1;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.RemoveAnimation]  = BindingServiceProvider.TemplateMemberPriority + 1;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ReplaceAnimation] = BindingServiceProvider.TemplateMemberPriority + 1;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ScrollPosition]   = BindingServiceProvider.TemplateMemberPriority + 1;

            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override <UITableView>());
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.AddAnimation));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.RemoveAnimation));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ReplaceAnimation));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ScrollPosition));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.UseAnimations));
            MemberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITableView.SelectedItemChangedEvent));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override <UITableView>(), TableViewItemsSourceChanged));
            MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UITableView.SelectedItem,
                                                                       GetTableViewSelectedItem, SetTableViewSelectedItem,
                                                                       (info, view, arg3) => (IDisposable)view.SetBindingMemberValue(AttachedMembers.UITableView.SelectedItemChangedEvent, arg3)));
            var itemTemplateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ItemTemplateSelector, (view, args) => args.NewValue?.Initialize(view));

            MemberProvider.Register(itemTemplateMember);
            MemberProvider.Register(typeof(UITableView), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);
        }
示例#28
0
        public void ResolverShouldRegisterAndResolveDynamicObjectTarget()
        {
            string name = BindingServiceProvider.ResourceResolver.RootElementResourceName;
            var    visualTreeManagerMock = new VisualTreeManagerMock();

            BindingServiceProvider.VisualTreeManager = visualTreeManagerMock;
            var rootMember = AttachedBindingMember.CreateAutoProperty <object, object>("root");

            visualTreeManagerMock.GetRootMember = type => rootMember;
            var target = new object();

            rootMember.SetValue(target, target);

            var dataContext = new DataContext
            {
                { BindingBuilderConstants.Target, target }
            };

            var resolver = CreateBindingResourceResolver();

            bool isInvoked = false;
            var  value     = resolver.ResolveObject(name, dataContext, false);

            value.Value.ShouldEqual(target);
            value.ValueChanged += (sender, args) => isInvoked = true;

            rootMember.SetValue(target, name);
            value.Value.ShouldEqual(name);
            isInvoked.ShouldBeTrue();
        }
        public static void RegisterObjectMembers()
        {
            var itemsSourceMember         = AttachedBindingMember.CreateAutoProperty <object, IEnumerable>(AttachedMemberConstants.ItemsSource, ObjectItemsSourceChanged);
            var defaultMemberRegistration = new DefaultAttachedMemberRegistration <IEnumerable>(itemsSourceMember);

            MemberProvider.Register(defaultMemberRegistration.ToAttachedBindingMember <object>());
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <object, ICollectionViewManager>(AttachedMembers.UIView.CollectionViewManager.Path));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <object, IContentViewManager>(AttachedMembers.UIView.ContentViewManager.Path));
            MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(ItemsSourceGeneratorBase.MemberDescriptor,
                                                                             (o, args) =>
            {
                IEnumerable itemsSource = null;
                if (args.OldValue != null)
                {
                    itemsSource = args.OldValue.ItemsSource;
                    args.OldValue.SetItemsSource(null);
                }
                args.NewValue?.SetItemsSource(itemsSource);
            }));

            var itemTemplateMember = AttachedBindingMember.CreateAutoProperty <object, IDataTemplateSelector>(AttachedMemberConstants.ItemTemplateSelector);

            MemberProvider.Register(itemTemplateMember);
            MemberProvider.Register(typeof(object), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);
        }
        public void CreateMemberGenericObserveTest()
        {
            bool         isInvoked    = false;
            IDisposable  result       = null;
            var          listenerMock = new EventListenerMock();
            var          source       = new BindingSourceModel();
            const string path         = "path";
            var          property     = AttachedBindingMember.CreateMember <BindingSourceModel, string>(path, (info, o) => null,
                                                                                                        (info, o, v) => { },
                                                                                                        (info, o, arg3) =>
            {
                isInvoked = true;
                info.ShouldNotBeNull();
                o.ShouldEqual(source);
                arg3.ShouldEqual(listenerMock);
                return(result);
            });

            property.TryObserve(source, listenerMock).ShouldBeNull();
            isInvoked.ShouldBeTrue();

            isInvoked = false;
            result    = new ActionToken(() => { });
            property.TryObserve(source, listenerMock).ShouldEqual(result);
            isInvoked.ShouldBeTrue();
        }