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);
            }));
        }
 private static void RegisterViewMembers(IBindingMemberProvider memberProvider)
 {
     //View
     memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.View.Fragment));
     memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.FindByNameMethod, ViewFindByNameMember));
     memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.Parent, GetViewParentValue, SetViewParentValue, ObserveViewParent));
     memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>(AttachedMemberConstants.Focused,
                                                                             (info, view) => view.IsFocused, (info, view, arg3) =>
     {
         if (arg3)
         {
             view.RequestFocus();
         }
         else
         {
             view.ClearFocus();
         }
     }, "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(AttachedMembers.View.Visible,
                                                                (info, view) => view.Visibility == ViewStates.Visible,
                                                                (info, view, value) => view.Visibility = value ? ViewStates.Visible : ViewStates.Gone,
                                                                ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.View.Hidden,
                                                                (info, view) => view.Visibility != ViewStates.Visible,
                                                                (info, view, value) => view.Visibility = value ? ViewStates.Gone : ViewStates.Visible,
                                                                ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, object>(AttachedMembers.Toolbar.MenuTemplate.Path));
     memberProvider.Register(AttachedBindingMember.CreateEvent <View>("WidthChanged", (info, o, arg3) => new SizeObserver(o, arg3)));
     memberProvider.Register(AttachedBindingMember.CreateEvent <View>("HeightChanged", (info, o, arg3) => new SizeObserver(o, arg3)));
 }
        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));
        }
Beispiel #4
0
        private static void RegisterMembers(IBindingMemberProvider memberProvider)
        {
#if !APPCOMPAT
            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.AddToBackStack));
#endif
        }
        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);
        }
Beispiel #7
0
 public static void Register <TTarget, TType>([NotNull] this IBindingMemberProvider memberProvider, string path,
                                              [NotNull] IAttachedBindingMemberInfo <TTarget, TType> member, bool rewrite = true)
     where TTarget : class
 {
     Should.NotBeNull(memberProvider, nameof(memberProvider));
     memberProvider.Register(typeof(TTarget), path, member, rewrite);
 }
 public static TValue TryGetValue <TValue>([NotNull] this IBindingMemberProvider memberProvider, object item,
                                           [NotNull] string memberName, bool ignoreAttachedMembers = false, TValue defaultValue = default(TValue))
 {
     Should.NotBeNull(memberProvider, "memberProvider");
     return(memberProvider
            .GetBindingMember(item.GetType(), memberName, ignoreAttachedMembers, false)
            .TryGetValue(item, defaultValue));
 }
        protected override IBindingPathMembers UpdateInternal(IBindingPathMembers oldPath, bool hasSubscribers)
        {
            object source = GetActualSource();

            if (source == null || source.IsUnsetValue())
            {
                return(UnsetBindingPathMembers.Instance);
            }
            bool allMembersAvailable = true;
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;
            IList <string>         items          = Path.Parts;

            //Trying to get member using full path with dot, example BindingErrorProvider.Errors or ErrorProvider.Errors.
            if (items.Count == 2)
            {
                var pathMember = memberProvider.GetBindingMember(source.GetType(), Path.Path, _ignoreAttachedMembers, false);
                if (pathMember != null)
                {
                    var observer = TryObserveMember(source, pathMember, true);
                    if (observer != null)
                    {
                        _listeners.Add(observer);
                    }
                    return(new MultiBindingPathMembers(_lastMemberListener.Reference, source, new[] { pathMember }));
                }
            }


            int lastIndex = items.Count - 1;
            var members   = new List <IBindingMemberInfo>();

            for (int index = 0; index < items.Count; index++)
            {
                string             name       = items[index];
                IBindingMemberInfo pathMember = memberProvider
                                                .GetBindingMember(source.GetType(), name, _ignoreAttachedMembers, true);
                members.Add(pathMember);
                var observer = TryObserveMember(source, pathMember, index == lastIndex);
                if (observer != null)
                {
                    _listeners.Add(observer);
                }
                if (index == lastIndex)
                {
                    break;
                }
                source = pathMember.GetValue(source, null);
                if (source == null || source.IsUnsetValue())
                {
                    allMembersAvailable = false;
                    break;
                }
            }

            return(allMembersAvailable
                ? new MultiBindingPathMembers(_lastMemberListener.Reference, source, members)
                : UnsetBindingPathMembers.Instance);
        }
        private static void RegisterCollectionViewMembers(IBindingMemberProvider memberProvider)
        {
            BindingServiceProvider.ResourceResolver.AddType(typeof(UICollectionViewScrollPosition));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UICollectionViewScrollDirection));

            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UICollectionView.UseAnimations] = BindingServiceProvider.TemplateMemberPriority + 1;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UICollectionView.ScrollPosition] = BindingServiceProvider.TemplateMemberPriority + 1;

            //UICollectionView
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override<UICollectionView>());
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.UseAnimations));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.ScrollPosition));
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UICollectionView.SelectedItemChangedEvent));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override<UICollectionView>(), CollectionViewItemsSourceChanged));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UICollectionView.SelectedItem,
                    GetCollectionViewSelectedItem, SetCollectionViewSelectedItem, (info, view, arg3) => (IDisposable)view.SetBindingMemberValue(AttachedMembers.UICollectionView.SelectedItemChangedEvent, arg3)));
            var itemTemplateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionView.ItemTemplateSelector,
                (view, args) =>
                {
                    if (args.NewValue != null)
                        args.NewValue.Initialize(view);
                });
            memberProvider.Register(itemTemplateMember);
            memberProvider.Register(typeof(UICollectionView), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);

            //UICollectionViewCell
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UICollectionViewCell.ClickEvent));
            memberProvider.Register(AttachedBindingMember
                .CreateNotifiableMember(AttachedMembers.UICollectionViewCell.Selected, (info, cell) =>
                {
                    if (CollectionViewSourceBase.HasMask(cell, CollectionViewSourceBase.InitializingStateMask))
                        return null;
                    var cellBindable = cell as UICollectionViewCellBindable;
                    if (cellBindable == null)
                        return cell.Selected;
                    return cellBindable.SelectedBind.GetValueOrDefault();
                },
                    (info, cell, arg3) =>
                    {
                        var cellBindable = cell as UICollectionViewCellBindable;
                        if (cellBindable == null)
                            cell.Selected = arg3.GetValueOrDefault();
                        else
                            cellBindable.SelectedBind = arg3;
                        return true;
                    }));
            memberProvider.Register(AttachedBindingMember
                .CreateNotifiableMember(AttachedMembers.UICollectionViewCell.Highlighted, (info, cell) => cell.Highlighted,
                    (info, cell, arg3) =>
                    {
                        cell.Highlighted = arg3;
                        return true;
                    }));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldHighlight));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldDeselect));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UICollectionViewCell.ShouldSelect));
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            Should.NotBeNull(memberProvider, "memberProvider");
            BindingBuilderExtensions.RegisterDefaultBindingMember <TextBlock>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember <TextBox>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember <Button>("Click");
            BindingBuilderExtensions.RegisterDefaultBindingMember <ComboBox>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember <ListBox>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember <ProgressBar>(() => c => c.Value);

            //UIElement
            memberProvider.Register(AttachedBindingMember.CreateMember <UIElement, bool>("Visible",
                                                                                         (info, view) => view.Visibility == Visibility.Visible,
                                                                                         (info, view, value) => view.Visibility = value ? Visibility.Visible : Visibility.Collapsed, ObserveVisiblityMember));
            memberProvider.Register(AttachedBindingMember.CreateMember <UIElement, bool>("Hidden",
                                                                                         (info, view) => view.Visibility != Visibility.Visible,
                                                                                         (info, view, value) => view.Visibility = value ? Visibility.Collapsed : Visibility.Visible, ObserveVisiblityMember));

            //FrameworkElement
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.Parent, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));
#if SILVERLIGHT || WINDOWSCOMMON || WINDOWS_PHONE
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => FocusManager.GetFocusedElement() == control, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <Control, bool>(AttachedMemberConstants.Enabled,
                                                                  (info, control) => control.IsEnabled,
                                                                  (info, control, value) => control.IsEnabled = value));
#else
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => control.IsFocused, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Enabled,
                                                                           (info, control) => control.IsEnabled,
                                                                           (info, control, value) => control.IsEnabled = value, "IsEnabledChanged"));
#endif

            //TextBox
#if WINDOWSCOMMON
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBox, string>("Text",
                                                                                         (info, box) => box.Text,
                                                                                         (info, box, value) => box.Text = value ?? string.Empty, "TextChanged"));

            //TextBlock
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBlock, string>("Text",
                                                                                           (info, box) => box.Text,
                                                                                           (info, box, value) => box.Text = value ?? string.Empty, ObserveTextTextBlock));
#else
            //WebBrowser
            memberProvider.Register(AttachedBindingMember.CreateMember <WebBrowser, Uri>("Source",
                                                                                         (info, browser) => browser.Source, (info, browser, arg3) => browser.Source = arg3, "Navigated"));
#endif
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember <Entry>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember <Label>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember <Button>("Clicked");
            BindingBuilderExtensions.RegisterDefaultBindingMember <ToolbarItem>("Clicked");
            BindingBuilderExtensions.RegisterDefaultBindingMember <ListView>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember <ProgressBar>(() => c => c.Progress);

            //Element
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <Element, object>(AttachedMemberConstants.Parent, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(typeof(Element), "BindingContext", BindingMemberProvider.BindingContextMember, true);

            //VisualElement
            var visibleMember = memberProvider.GetBindingMember(typeof(VisualElement),
                                                                ToolkitExtensions.GetMemberName <VisualElement>(() => element => element.IsVisible), true, false);

            if (visibleMember != null)
            {
                memberProvider.Register(typeof(VisualElement), "Visible", visibleMember, true);
                memberProvider.Register(AttachedBindingMember.CreateMember <VisualElement, bool>("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, "IsFocused", arg3)));

            var enabledMember = memberProvider.GetBindingMember(typeof(VisualElement),
                                                                ToolkitExtensions.GetMemberName <VisualElement>(() => element => element.IsEnabled), true, false);

            if (enabledMember != null)
            {
                memberProvider.Register(typeof(VisualElement), AttachedMemberConstants.Enabled, enabledMember, true);
            }

            //Toolbar item
            enabledMember = memberProvider.GetBindingMember(typeof(ToolbarItem), "IsEnabled", true, false);
            if (enabledMember != null)
            {
                memberProvider.Register(typeof(ToolbarItem), AttachedMemberConstants.Enabled, enabledMember, true);
            }
        }
Beispiel #13
0
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember <TextBlock>(nameof(TextBlock.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember <TextBox>(nameof(TextBox.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember <Button>(nameof(Button.Click));
            BindingBuilderExtensions.RegisterDefaultBindingMember <ComboBox>(nameof(ComboBox.ItemsSource));
            BindingBuilderExtensions.RegisterDefaultBindingMember <ListBox>(nameof(ListBox.ItemsSource));
            BindingBuilderExtensions.RegisterDefaultBindingMember <ProgressBar>(nameof(ProgressBar.Value));

            //UIElement
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIElement.Visible,
                                                                       (info, view) => view.Visibility == Visibility.Visible,
                                                                       (info, view, value) => view.Visibility = value ? Visibility.Visible : Visibility.Collapsed, ObserveVisiblityMember));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIElement.Hidden,
                                                                       (info, view) => view.Visibility != Visibility.Visible,
                                                                       (info, view, value) => view.Visibility = value ? Visibility.Collapsed : Visibility.Visible, ObserveVisiblityMember));

            //FrameworkElement
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.Parent, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));
#if WINDOWS_UWP
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => FocusManager.GetFocusedElement() == control, null, nameof(FrameworkElement.LostFocus)));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <Control, bool>(AttachedMemberConstants.Enabled,
                                                                  (info, control) => control.IsEnabled,
                                                                  (info, control, value) => control.IsEnabled = value));
#else
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => control.IsFocused, null, nameof(FrameworkElement.LostFocus)));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Enabled,
                                                                           (info, control) => control.IsEnabled,
                                                                           (info, control, value) => control.IsEnabled = value, nameof(FrameworkElement.IsEnabledChanged)));
#endif

#if WINDOWS_UWP
            //TextBox
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBox, string>(nameof(TextBox.Text),
                                                                                         (info, box) => box.Text,
                                                                                         (info, box, value) => box.Text = value ?? string.Empty, nameof(TextBox.TextChanged)));

            //TextBlock
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBlock, string>(nameof(TextBlock.Text),
                                                                                           (info, box) => box.Text,
                                                                                           (info, box, value) => box.Text = value ?? string.Empty, ObserveTextTextBlock));
#else
            //WebBrowser
            memberProvider.Register(AttachedBindingMember.CreateMember <WebBrowser, Uri>(nameof(WebBrowser),
                                                                                         (info, browser) => browser.Source, (info, browser, arg3) => browser.Source = arg3, nameof(WebBrowser.Navigated)));
#endif
        }
Beispiel #14
0
        protected override bool LoadInternal()
        {
            IocContainer.BindToConstant <IRepository>(new FileRepository());

#if !XAMARINFORMS
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersEx.UIView.IsBusy, IsBusyChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersEx.UIView.BusyMessage, BusyMessageChanged));
#endif
            return(true);
        }
        protected override bool LoadInternal()
        {
            IocContainer.BindToConstant <IRepository>(new FileRepository());

            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UIView, bool>("IsBusy", IsBusyChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UIView, object>("BusyMessage",
                                                                                              BusyMessageChanged));

            return(true);
        }
        protected override bool LoadInternal()
        {
            if (Mode != LoadMode.Design)
            {
                IocContainer.BindToConstant <IRepository>(new FileRepository());
            }
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersEx.Control.IsBusy, IsBusyChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersEx.Control.BusyMessage, BusyMessageChanged));
            return(true);
        }
        /// <summary>
        ///     Loads the current module.
        /// </summary>
        protected override bool LoadInternal()
        {
            //Registering attached property
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UILabel, string>("TextExt",
                                                                                               TextExtMemberChanged, TextExtMemberAttached, TextExtGetDefaultValue));

            memberProvider.Register(AttachedBindingMember.CreateMember <UILabel, string>("FormattedText",
                                                                                         GetFormattedTextValue, SetFormattedTextValue, ObserveFormattedTextValue));
            return(true);
        }
Beispiel #18
0
 internal static void SetDefaultValues()
 {
     _valueConverter    = BindingReflectionExtensions.Convert;
     _resourceResolver  = new BindingResourceResolver();
     _memberProvider    = new BindingMemberProvider();
     _visualTreeManager = new VisualTreeManager();
     _weakEventManager  = new WeakEventManager();
     _bindingManager    = new BindingManager();
     _bindingProvider   = new BindingProvider();
     _observerProvider  = new ObserverProvider();
     _contextManager    = new BindingContextManager();
 }
Beispiel #19
0
        private static void Register(IBindingMemberProvider memberProvider)
        {
            Should.NotBeNull(memberProvider, "memberProvider");
            //DependencyObject
            memberProvider.Register(AttachedBindingMember.CreateMember <DependencyObject, ICollection <object> >(
                                        AttachedMemberConstants.ErrorsPropertyMember, GetErrors, SetErrors, ObserveErrors));

            //UIElement
            memberProvider.Register(AttachedBindingMember.CreateMember <UIElement, bool>("Visible",
                                                                                         (info, view) => view.Visibility == Visibility.Visible,
                                                                                         (info, view, value) => view.Visibility = value ? Visibility.Visible : Visibility.Collapsed, ObserveVisiblityMember));
            memberProvider.Register(AttachedBindingMember.CreateMember <UIElement, bool>("Hidden",
                                                                                         (info, view) => view.Visibility != Visibility.Visible,
                                                                                         (info, view, value) => view.Visibility = value ? Visibility.Collapsed : Visibility.Visible, ObserveVisiblityMember));

            //FrameworkElement
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.Parent, GetParentValue, null, ObserveParentMember));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));
#if SILVERLIGHT || NETFX_CORE || WINDOWSCOMMON
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => FocusManager.GetFocusedElement() == control, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <Control, bool>(AttachedMemberConstants.Enabled,
                                                                  (info, control) => control.IsEnabled,
                                                                  (info, control, value) => control.IsEnabled = value));
#else
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Focused,
                                                                           (info, control) => control.IsFocused, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <FrameworkElement, bool>(AttachedMemberConstants.Enabled,
                                                                           (info, control) => control.IsEnabled,
                                                                           (info, control, value) => control.IsEnabled = value, "IsEnabledChanged"));
#endif

            //TextBox
#if WINDOWSCOMMON || NETFX_CORE
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBox, string>("Text",
                                                                                         (info, box) => box.Text,
                                                                                         (info, box, value) => box.Text = value ?? string.Empty, "TextChanged"));

            //TextBlock
            memberProvider.Register(AttachedBindingMember.CreateMember <TextBlock, string>("Text",
                                                                                           (info, box) => box.Text,
                                                                                           (info, box, value) => box.Text = value ?? string.Empty, ObserveTextTextBlock));
#endif
        }
        private static void RegisterPreferenceMembers(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Preference.Click);
            BindingBuilderExtensions.RegisterDefaultBindingMember <TwoStatePreference>(nameof(TwoStatePreference.Checked));
            BindingBuilderExtensions.RegisterDefaultBindingMember <ListPreference>(nameof(ListPreference.Value));
            BindingBuilderExtensions.RegisterDefaultBindingMember <MultiSelectListPreference>(nameof(MultiSelectListPreference.Values));
            BindingBuilderExtensions.RegisterDefaultBindingMember <EditTextPreference>(nameof(EditTextPreference.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.PreferenceGroup.ItemsSource);
            var changeMember = AttachedBindingMember.CreateEvent(AttachedMembers.Preference.ValueChangedEvent);

            BindingServiceProvider.MemberProvider.Register(changeMember);
            BindingServiceProvider.MemberProvider.Register(typeof(TwoStatePreference), "CheckedChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(MultiSelectListPreference), "ValuesChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(ListPreference), "EntryChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(MultiSelectListPreference), "EntryChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(EditTextPreference), "TextChanged", changeMember, true);


            //ListPreference
            memberProvider.Register(
                AttachedBindingMember.CreateMember <ListPreference, IEnumerable <string> >("EntryValues",
                                                                                           (info, preference) => preference.GetEntryValues(),
                                                                                           (info, preference, arg3) =>
                                                                                           preference.SetEntryValues(arg3 == null ? Empty.Array <string>() : arg3.ToArray())));
            memberProvider.Register(
                AttachedBindingMember.CreateMember <ListPreference, IEnumerable <string> >("Entries",
                                                                                           (info, preference) => preference.GetEntries(),
                                                                                           (info, preference, arg3) =>
                                                                                           preference.SetEntries(arg3 == null ? Empty.Array <string>() : arg3.ToArray())));

            //MultiSelectListPreference
            memberProvider.Register(
                AttachedBindingMember.CreateMember <MultiSelectListPreference, IEnumerable <string> >("EntryValues",
                                                                                                      (info, preference) => preference.GetEntryValues(),
                                                                                                      (info, preference, arg3) =>
                                                                                                      preference.SetEntryValues(arg3 == null ? Empty.Array <string>() : arg3.ToArray())));
            memberProvider.Register(
                AttachedBindingMember.CreateMember <MultiSelectListPreference, IEnumerable <string> >("Entries",
                                                                                                      (info, preference) => preference.GetEntries(),
                                                                                                      (info, preference, arg3) =>
                                                                                                      preference.SetEntries(arg3 == null ? Empty.Array <string>() : arg3.ToArray())));

            //PreferenceGroup
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.PreferenceGroup.ItemsSource, PreferenceGroupItemsSourceChanged));
            var templateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.PreferenceGroup.ItemTemplateSelector);

            memberProvider.Register(templateMember);
            memberProvider.Register(AttachedMemberConstants.ItemTemplate, templateMember);
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            //Element
            memberProvider.Register(AttachedBindingMember
                                    .CreateMember <Element, object>(AttachedMemberConstants.Parent, GetParentValue, null, ObserveParentMember));
            memberProvider.Register(typeof(Element), "BindingContext", BindingMemberProvider.BindingContextMember, true);

            //VisualElement
            var visibleMember = memberProvider.GetBindingMember(typeof(VisualElement),
                                                                ToolkitExtensions.GetMemberName <VisualElement>(element => element.IsVisible), true, false);

            if (visibleMember != null)
            {
                memberProvider.Register(typeof(VisualElement), "Visible", visibleMember, true);
                memberProvider.Register(AttachedBindingMember.CreateMember <VisualElement, bool>("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, "IsFocused", arg3)));

            var enabledMember = memberProvider.GetBindingMember(typeof(VisualElement),
                                                                ToolkitExtensions.GetMemberName <VisualElement>(element => element.IsEnabled), true, false);

            if (enabledMember != null)
            {
                memberProvider.Register(typeof(VisualElement), AttachedMemberConstants.Enabled, enabledMember, true);
            }

            //Toolbar item
            enabledMember = memberProvider.GetBindingMember(typeof(ToolbarItem), "IsEnabled", true, false);
            if (enabledMember != null)
            {
                memberProvider.Register(typeof(ToolbarItem), AttachedMemberConstants.Enabled, enabledMember, true);
            }
        }
        /// <summary>
        ///     Updates the current values.
        /// </summary>
        protected override void UpdateInternal()
        {
            try
            {
                ClearListeners();
                object source = GetActualSource();
                if (source == null || source.IsUnsetValue())
                {
                    _members = UnsetBindingPathMembers.Instance;
                    return;
                }
                bool allMembersAvailable = true;
                IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;
                IList <string>         items          = Path.Parts;
                int lastIndex = items.Count - 1;
                var members   = new List <IBindingMemberInfo>();
                for (int index = 0; index < items.Count; index++)
                {
                    string             name       = items[index];
                    IBindingMemberInfo pathMember = memberProvider
                                                    .GetBindingMember(source.GetType(), name, _ignoreAttachedMembers, true);
                    members.Add(pathMember);
                    var observer = TryObserveMember(source, pathMember, index == lastIndex);
                    if (observer != null)
                    {
                        _listeners.Add(observer);
                    }
                    if (index == lastIndex)
                    {
                        break;
                    }
                    source = pathMember.GetValue(source, null);
                    if (source == null || source.IsUnsetValue())
                    {
                        allMembersAvailable = false;
                        break;
                    }
                }

                _members = allMembersAvailable
                    ? new MultiBindingPathMembers(_selfReference, source, Path, members)
                    : UnsetBindingPathMembers.Instance;
            }
            catch (Exception)
            {
                _members = UnsetBindingPathMembers.Instance;
                throw;
            }
        }
 internal static void SetDefaultValues()
 {
     BindingCultureInfo  = null;
     _updateEventFinder  = FindUpdateEvent;
     _bindingPathFactory = BindingPath.Create;
     _valueConverter     = BindingReflectionExtensions.Convert;
     _resourceResolver   = new BindingResourceResolver();
     _memberProvider     = new BindingMemberProvider();
     _visualTreeManager  = new VisualTreeManager();
     _weakEventManager   = new WeakEventManager();
     _bindingManager     = new BindingManager();
     _bindingProvider    = new BindingProvider();
     _observerProvider   = new ObserverProvider();
     _contextManager     = new BindingContextManager();
 }
        /// <summary>
        ///     Loads the current module.
        /// </summary>
        protected override bool LoadInternal()
        {
            BindingServiceProvider.ResourceResolver.AddObject("buttonTemplate",
                                                              new BindingResourceObject(new ButtonItemTemplate()));

            //Registering attached property
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UILabel, string>("TextExt",
                                                                                               TextExtMemberChanged, TextExtMemberAttached, TextExtGetDefaultValue));

            memberProvider.Register(AttachedBindingMember.CreateMember <UILabel, string>("FormattedText",
                                                                                         GetFormattedTextValue, SetFormattedTextValue, ObserveFormattedTextValue));
            return(true);
        }
        private static void RegisterDialogMembers(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember <Element>(nameof(Element.Caption));
            memberProvider.Register(AttachedBindingMember.CreateMember <Element, string>(nameof(Element.Caption),
                                                                                         (info, element) => element.Caption,
                                                                                         (info, element, arg3) =>
            {
                element.Caption = arg3;
                element.Reload();
            }));
            memberProvider.Register(AttachedBindingMember.CreateMember <Element, object>(AttachedMemberConstants.ParentExplicit,
                                                                                         (info, element) => element.Parent, null));

            BindingBuilderExtensions.RegisterDefaultBindingMember <EntryElement>(nameof(EntryElement.Value));
            IBindingMemberInfo 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)));
            }

            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);
            }));
        }
        /// <summary>
        ///     Loads the current module.
        /// </summary>
        protected override bool LoadInternal()
        {
            //Registering attached property
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            memberProvider.Register(
                AttachedBindingMember.CreateMember <ListView, object>(AttachedMemberConstants.SelectedItem,
                                                                      GetListViewSelectedItem, SetListViewSelectedItem, "ItemSelectionChanged"));

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <Label, string>("TextExt",
                                                                                             TextExtMemberChanged, TextExtMemberAttached, TextExtGetDefaultValue));

            memberProvider.Register(AttachedBindingMember.CreateMember <Label, string>("FormattedText",
                                                                                       GetFormattedTextValue, SetFormattedTextValue, ObserveFormattedTextValue));
            return(true);
        }
        private static void RegisterPreferenceMembers(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Preference.Click);
            BindingBuilderExtensions.RegisterDefaultBindingMember<TwoStatePreference>(() => preference => preference.Checked);
            BindingBuilderExtensions.RegisterDefaultBindingMember<ListPreference>(() => preference => preference.Value);
            BindingBuilderExtensions.RegisterDefaultBindingMember<MultiSelectListPreference>(() => preference => preference.Values);
            BindingBuilderExtensions.RegisterDefaultBindingMember<EditTextPreference>(() => preference => preference.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.PreferenceGroup.ItemsSource);
            var changeMember = AttachedBindingMember.CreateEvent(AttachedMembers.Preference.ValueChangedEvent);
            BindingServiceProvider.MemberProvider.Register(changeMember);
            BindingServiceProvider.MemberProvider.Register(typeof(TwoStatePreference), "CheckedChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(MultiSelectListPreference), "ValuesChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(ListPreference), "EntryChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(MultiSelectListPreference), "EntryChanged", changeMember, true);
            BindingServiceProvider.MemberProvider.Register(typeof(EditTextPreference), "TextChanged", changeMember, true);


            //ListPreference
            memberProvider.Register(
                AttachedBindingMember.CreateMember<ListPreference, IEnumerable<string>>("EntryValues",
                    (info, preference) => preference.GetEntryValues(),
                    (info, preference, arg3) =>
                        preference.SetEntryValues(arg3 == null ? Empty.Array<string>() : arg3.ToArray())));
            memberProvider.Register(
                AttachedBindingMember.CreateMember<ListPreference, IEnumerable<string>>("Entries",
                    (info, preference) => preference.GetEntries(),
                    (info, preference, arg3) =>
                        preference.SetEntries(arg3 == null ? Empty.Array<string>() : arg3.ToArray())));

            //MultiSelectListPreference
            memberProvider.Register(
                AttachedBindingMember.CreateMember<MultiSelectListPreference, IEnumerable<string>>("EntryValues",
                    (info, preference) => preference.GetEntryValues(),
                    (info, preference, arg3) =>
                        preference.SetEntryValues(arg3 == null ? Empty.Array<string>() : arg3.ToArray())));
            memberProvider.Register(
                AttachedBindingMember.CreateMember<MultiSelectListPreference, IEnumerable<string>>("Entries",
                    (info, preference) => preference.GetEntries(),
                    (info, preference, arg3) =>
                        preference.SetEntries(arg3 == null ? Empty.Array<string>() : arg3.ToArray())));

            //PreferenceGroup
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.PreferenceGroup.ItemsSource, PreferenceGroupItemsSourceChanged));
            var templateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.PreferenceGroup.ItemTemplateSelector);
            memberProvider.Register(templateMember);
            memberProvider.Register(AttachedMemberConstants.ItemTemplate, templateMember);
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember<Entry>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember<Label>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember<Button>("Clicked");
            BindingBuilderExtensions.RegisterDefaultBindingMember<ToolbarItem>("Clicked");
            BindingBuilderExtensions.RegisterDefaultBindingMember<ListView>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember<ProgressBar>(() => c => c.Progress);

            //Element
            memberProvider.Register(AttachedBindingMember
                .CreateMember<Element, object>(AttachedMemberConstants.ParentExplicit, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(typeof(Element), "BindingContext", BindingMemberProvider.BindingContextMember, true);

            //VisualElement
            var visibleMember = memberProvider.GetBindingMember(typeof(VisualElement),
                ToolkitExtensions.GetMemberName<VisualElement>(() => element => element.IsVisible), true, false);
            if (visibleMember != null)
            {
                memberProvider.Register(typeof(VisualElement), "Visible", visibleMember, true);
                memberProvider.Register(AttachedBindingMember.CreateMember<VisualElement, bool>("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, "IsFocused", arg3)));

            var enabledMember = memberProvider.GetBindingMember(typeof(VisualElement),
                ToolkitExtensions.GetMemberName<VisualElement>(() => element => element.IsEnabled), true, false);
            if (enabledMember != null)
                memberProvider.Register(typeof(VisualElement), AttachedMemberConstants.Enabled, enabledMember, true);

            //Toolbar item
            enabledMember = memberProvider.GetBindingMember(typeof(ToolbarItem), "IsEnabled", true, false);
            if (enabledMember != null)
                memberProvider.Register(typeof(ToolbarItem), AttachedMemberConstants.Enabled, enabledMember, true);
        }
        public static IBindingMemberInfo TryFindMemberChangeEvent([NotNull] IBindingMemberProvider memberProvider,
                                                                  [NotNull] Type type, [NotNull] string memberName)
        {
            Should.NotBeNull(memberProvider, "memberProvider");
            var member = memberProvider.GetBindingMember(type, memberName + "Changed", false, false);

            if (member == null || member.MemberType != BindingMemberType.Event)
            {
                member = memberProvider.GetBindingMember(type, memberName + "Change", false, false);
            }

            if (member == null || member.MemberType != BindingMemberType.Event)
            {
                return(null);
            }
            return(member);
        }
Beispiel #30
0
        private static void RegisterTableViewMembers(IBindingMemberProvider memberProvider)
        {
            BindingServiceProvider.ResourceResolver.AddType("UITableViewRowAnimation", typeof(UITableViewRowAnimation));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewScrollPosition", typeof(UITableViewScrollPosition));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewCellEditingStyle", typeof(UITableViewCellEditingStyle));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewCellAccessory", typeof(UITableViewCellAccessory));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewCellSelectionStyle", typeof(UITableViewCellSelectionStyle));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewCellSeparatorStyle", typeof(UITableViewCellSeparatorStyle));
            BindingServiceProvider.ResourceResolver.AddType("UITableViewCellStyle", typeof(UITableViewCellStyle));

            BindingServiceProvider.BindingMemberPriorities[TableViewUseAnimationsMember.Path]    = 1;
            BindingServiceProvider.BindingMemberPriorities[TableViewAddAnimationMember.Path]     = 1;
            BindingServiceProvider.BindingMemberPriorities[TableViewRemoveAnimationMember.Path]  = 1;
            BindingServiceProvider.BindingMemberPriorities[TableViewReplaceAnimationMember.Path] = 1;
            BindingServiceProvider.BindingMemberPriorities[TableViewScrollPositionMember.Path]   = 1;
            BindingServiceProvider.BindingMemberPriorities[TableViewCellBindMember.Path]         = 1;

            //UITableView
            memberProvider.Register(TableViewReadOnlyMember);
            memberProvider.Register(TableViewCellBindMember);
            memberProvider.Register(TableViewAddAnimationMember);
            memberProvider.Register(TableViewRemoveAnimationMember);
            memberProvider.Register(TableViewReplaceAnimationMember);
            memberProvider.Register(TableViewScrollPositionMember);
            memberProvider.Register(TableViewDefaultCellStyleMember);
            memberProvider.Register(TableViewSelectedItemChangedEvent);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UITableView, IEnumerable>(AttachedMemberConstants.ItemsSource, TableViewItemsSourceChanged));
            memberProvider.Register(AttachedBindingMember.CreateMember <UITableView, object>(AttachedMemberConstants.SelectedItem,
                                                                                             GetTableViewSelectedItem, SetTableViewSelectedItem, (info, view, arg3) => (IDisposable)TableViewSelectedItemChangedEvent.SetValue(view, arg3)));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UITableView, ITableCellTemplateSelector>(AttachedMemberConstants.ItemTemplate));

            //UITableViewCell
            memberProvider.Register(TableViewCellAccessoryButtonTappedEvent);
            memberProvider.Register("Click", TableViewCellAccessoryButtonTappedEvent);
            memberProvider.Register(TableViewCellDeleteClickEvent);
            memberProvider.Register(TableViewCellInsertClickEvent);
            memberProvider.Register(TableViewCellMoveableMember);
            memberProvider.Register(TitleForDeleteConfirmationMember);
            memberProvider.Register(TableViewCellEditingStyleMember);
            memberProvider.Register(TableViewCellSelectedMember);
            memberProvider.Register(TableViewCellHighlightedMember);
            memberProvider.Register(TableViewCellEditingMember);
            memberProvider.Register(TableViewCellShouldHighlightMember);
        }
        private static void RegisterDialogMembers(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember<Element>(nameof(Element.Caption));
            memberProvider.Register(AttachedBindingMember.CreateMember<Element, string>(nameof(Element.Caption),
                (info, element) => element.Caption,
                (info, element, arg3) =>
                {
                    element.Caption = arg3;
                    element.Reload();
                }));
            memberProvider.Register(AttachedBindingMember.CreateMember<Element, object>(AttachedMemberConstants.ParentExplicit,
                (info, element) => element.Parent, null));

            BindingBuilderExtensions.RegisterDefaultBindingMember<EntryElement>(nameof(EntryElement.Value));
            IBindingMemberInfo 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)));

            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;
                }));
        }
        protected override bool LoadInternal()
        {
#if NETFX_CORE
            IocContainer.BindToMethod <ILocalizationManager>((container, list) =>
            {
                var manager = new LocalizationManagerExt();
                manager.Initilaize();
                return(manager);
            }, DependencyLifecycle.SingleInstance);
#endif

            //Registering attached property
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <TextBlock, string>("TextExt",
                                                                                                 TextExtMemberChanged, TextExtMemberAttached, TextExtGetDefaultValue));

            memberProvider.Register(AttachedBindingMember.CreateMember <TextBlock, string>("FormattedText",
                                                                                           GetFormattedTextValue, SetFormattedTextValue, ObserveFormattedTextValue));
            return(true);
        }
Beispiel #33
0
        protected override bool LoadInternal()
        {
            if (Mode != LoadMode.Design)
            {
                IocContainer.BindToConstant <IRepository>(new FileRepository());
            }
            IBindingResourceResolver resourceResolver = BindingServiceProvider.ResourceResolver;
            IBindingMemberProvider   memberProvider   = BindingServiceProvider.MemberProvider;

            //Registering tab template resource.
            resourceResolver.AddObject("tabTemplate",
                                       new BindingResourceObject(new ViewModelTabDataTemplate()));

            //Registering content manager to set content value in code-behind.
            resourceResolver.AddObject("editorContentManager",
                                       new BindingResourceObject(new WrapperContentManager()));

            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <Control, bool>("IsBusy", IsBusyChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty <Control, object>("BusyMessage",
                                                                                               BusyMessageChanged));
            return(true);
        }
Beispiel #34
0
        protected virtual IObserver CreateObserver(object source, string path, bool ignoreContext,
                                                   IBindingMemberProvider memberProvider = null, IBindingContextManager contextManager = null)
        {
            if (memberProvider != null)
            {
                BindingServiceProvider.MemberProvider = memberProvider;
            }
            if (contextManager != null)
            {
                BindingServiceProvider.ContextManager = contextManager;
            }
            var bindingPath = BindingPath.Create(path);

            if (bindingPath.IsEmpty)
            {
                return(new EmptyPathObserver(source, bindingPath));
            }
            if (bindingPath.IsSingle)
            {
                return(new SinglePathObserver(source, bindingPath, ignoreContext));
            }
            return(new MultiPathObserver(source, bindingPath, ignoreContext));
        }
Beispiel #35
0
        protected virtual IObserver CreateObserver(object source, string path, bool ignoreContext,
                                                   IBindingMemberProvider memberProvider = null, IBindingContextManager contextManager = null, bool hasStablePath = false, bool observable = true, bool optional = false)
        {
            if (memberProvider != null)
            {
                BindingServiceProvider.MemberProvider = memberProvider;
            }
            if (contextManager != null)
            {
                BindingServiceProvider.ContextManager = contextManager;
            }
            var bindingPath = new BindingPath(path);

            if (bindingPath.IsEmpty)
            {
                return(new EmptyPathObserver(source, bindingPath));
            }
            if (bindingPath.IsSingle)
            {
                return(new SinglePathObserver(source, bindingPath, ignoreContext, hasStablePath, observable, optional));
            }
            return(new MultiPathObserver(source, bindingPath, ignoreContext, hasStablePath, observable, optional));
        }
        private static void RegisterMenuMembers(IBindingMemberProvider memberProvider)
        {
            //IMenu
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.Menu.ItemsSource, MenuItemsSourceChanged));
            var menuEnabledMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.Menu.Enabled,
                    (menu, args) => menu.SetGroupEnabled(0, args.NewValue.GetValueOrDefault()));
            memberProvider.Register(menuEnabledMember);
            memberProvider.Register("IsEnabled", menuEnabledMember);

            var menuVisibleMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.Menu.Visible,
                (menu, args) => menu.SetGroupVisible(0, args.NewValue.GetValueOrDefault()));
            memberProvider.Register(menuVisibleMember);
            memberProvider.Register("IsVisible", menuVisibleMember);

            //IMenuItem
            memberProvider.Register(AttachedBindingMember.CreateNotifiableMember(AttachedMembers.MenuItem.IsChecked,
                (info, item) => item.IsChecked, (info, item, value) =>
                {
                    if (value == item.IsChecked)
                        return false;
                    item.SetChecked(value);
                    return true;
                }));
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.MenuItem.Click, SetClickEventValue));

            memberProvider.Register(AttachedBindingMember
                .CreateMember<IMenuItem, object>("AlphabeticShortcut",
                    (info, item) => item.AlphabeticShortcut,
                    (info, item, value) =>
                    {
                        if (value is char)
                            item.SetAlphabeticShortcut((char)value);
                        else
                            item.SetAlphabeticShortcut(value.ToStringSafe()[0]);
                    }));
            memberProvider.Register(AttachedBindingMember
                .CreateMember(AttachedMembers.MenuItem.Icon, (info, item) => item.Icon,
                    (info, item, value) =>
                    {
                        if (value is int)
                            item.SetIcon((int)value);
                        else
                            item.SetIcon((Drawable)value);
                    }));

            memberProvider.Register(AttachedBindingMember
                .CreateMember<IMenuItem, bool>("IsCheckable",
                    (info, item) => item.IsCheckable,
                    (info, item, value) => item.SetCheckable(value)));

            var menuItemEnabled = AttachedBindingMember.CreateMember<IMenuItem, bool>(AttachedMemberConstants.Enabled,
                (info, item) => item.IsEnabled,
                (info, item, value) => item.SetEnabled(value));
            memberProvider.Register(menuItemEnabled);
            memberProvider.Register("IsEnabled", menuItemEnabled);
            memberProvider.Register(AttachedBindingMember
                .CreateMember<IMenuItem, bool>("IsVisible", (info, item) => item.IsVisible,
                    (info, item, value) => item.SetVisible(value)));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<IMenuItem, object>("NumericShortcut",
                    (info, item) => item.NumericShortcut,
                    (info, item, value) =>
                    {
                        if (value is char)
                            item.SetNumericShortcut((char)value);
                        else
                            item.SetNumericShortcut(value.ToStringSafe()[0]);
                    }));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.MenuItem.Title,
                (info, item) => item.TitleFormatted.ToStringSafe(),
                (info, item, value) => item.SetTitle(value)));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.MenuItem.TitleCondensed,
                (info, item) => item.TitleCondensedFormatted.ToStringSafe(),
                (info, item, value) => item.SetTitleCondensed(value)));
        }
 internal static void SetDefaultValues()
 {
     BindingCultureInfo = null;
     _updateEventFinder = FindUpdateEvent;
     _bindingPathFactory = BindingPath.Create;
     _valueConverter = BindingReflectionExtensions.Convert;
     _resourceResolver = new BindingResourceResolver();
     _memberProvider = new BindingMemberProvider();
     _visualTreeManager = new VisualTreeManager();
     _weakEventManager = new WeakEventManager();
     _bindingManager = new BindingManager();
     _bindingProvider = new BindingProvider();
     _observerProvider = new ObserverProvider();
     _contextManager = new BindingContextManager();
 }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            Should.NotBeNull(memberProvider, "memberProvider");
            BindingBuilderExtensions.RegisterDefaultBindingMember<TextBlock>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember<TextBox>(() => t => t.Text);
            BindingBuilderExtensions.RegisterDefaultBindingMember<Button>("Click");
            BindingBuilderExtensions.RegisterDefaultBindingMember<ComboBox>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember<ListBox>(() => c => c.ItemsSource);
            BindingBuilderExtensions.RegisterDefaultBindingMember<ProgressBar>(() => c => c.Value);

            //UIElement
            memberProvider.Register(AttachedBindingMember.CreateMember<UIElement, bool>("Visible",
                    (info, view) => view.Visibility == Visibility.Visible,
                    (info, view, value) => view.Visibility = value ? Visibility.Visible : Visibility.Collapsed, ObserveVisiblityMember));
            memberProvider.Register(AttachedBindingMember.CreateMember<UIElement, bool>("Hidden",
                    (info, view) => view.Visibility != Visibility.Visible,
                    (info, view, value) => view.Visibility = value ? Visibility.Collapsed : Visibility.Visible, ObserveVisiblityMember));

            //FrameworkElement            
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, object>(AttachedMemberConstants.ParentExplicit, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));
#if SILVERLIGHT || WINDOWSCOMMON || WINDOWS_PHONE
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Focused,
                    (info, control) => FocusManager.GetFocusedElement() == control, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<Control, bool>(AttachedMemberConstants.Enabled,
                    (info, control) => control.IsEnabled,
                    (info, control, value) => control.IsEnabled = value));
#else
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Focused,
                    (info, control) => control.IsFocused, null, "LostFocus"));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Enabled,
                    (info, control) => control.IsEnabled,
                    (info, control, value) => control.IsEnabled = value, "IsEnabledChanged"));
#endif

            //TextBox                        
#if WINDOWSCOMMON
            memberProvider.Register(AttachedBindingMember.CreateMember<TextBox, string>("Text",
                (info, box) => box.Text,
                (info, box, value) => box.Text = value ?? string.Empty, "TextChanged"));

            //TextBlock
            memberProvider.Register(AttachedBindingMember.CreateMember<TextBlock, string>("Text",
                (info, box) => box.Text,
                (info, box, value) => box.Text = value ?? string.Empty, ObserveTextTextBlock));
#else
            //WebBrowser
            memberProvider.Register(AttachedBindingMember.CreateMember<WebBrowser, Uri>("Source",
                (info, browser) => browser.Source, (info, browser, arg3) => browser.Source = arg3, "Navigated"));
#endif
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITextFieldViewMode));
            RegisterTableViewMembers(memberProvider);
            RegisterCollectionViewMembers(memberProvider);
            RegisterDialogMembers(memberProvider);
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIBarButtonItem.ClickEvent);
            BindingBuilderExtensions.RegisterDefaultBindingMember<UISearchBar>(nameof(UISearchBar.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember<UISlider>(nameof(UISlider.Value));
            BindingBuilderExtensions.RegisterDefaultBindingMember<UIProgressView>(nameof(UIProgressView.Progress));

            //Object
            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);
                    }
                    if (args.NewValue != null)
                        args.NewValue.SetItemsSource(itemsSource);
                }));

            var itemTemplateMember = AttachedBindingMember.CreateAutoProperty<object, IDataTemplateSelector>(AttachedMemberConstants.ItemTemplateSelector);
            memberProvider.Register(itemTemplateMember);
            memberProvider.Register(typeof(object), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);

            //UIView
            memberProvider.Register(AttachedBindingMember.CreateMember<UIView, object>(AttachedMemberConstants.Parent,
                (info, view) => ParentObserver.GetOrAdd(view).Parent, (info, view, arg3) => ParentObserver.GetOrAdd(view).Parent = arg3, (info, view, arg3) => ParentObserver.GetOrAdd(view).AddWithUnsubscriber(arg3)));
            memberProvider.Register(AttachedBindingMember.CreateMember<UIView, object>(AttachedMemberConstants.FindByNameMethod, FindViewByName));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.Content, ContentChanged));
            var member = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ContentTemplateSelector, ContentTemplateChanged);
            memberProvider.Register(member);
            memberProvider.Register(typeof(UIView), AttachedMemberConstants.ContentTemplate, member, true);
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIView.Visible, (info, view) => !view.Hidden, (info, view, arg3) => view.Hidden = !arg3));

            //UISegmentedControl
            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)));

            //UIButton
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIControl.ClickEvent.Override<UIButton>());
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIButton.Title,
                (info, button) => button.CurrentTitle,
                (info, button, arg3) => button.SetTitle(arg3, button.State)));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIButton.State,
                (info, button) => button.State,
                (info, button, arg3) => button.SetTitle(button.CurrentTitle, arg3)));

            //UIDatePicker
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIDatePicker.Date);
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIDatePicker.Date,
                (info, picker) => NSDateToDateTime(picker.Date), (info, picker, arg3) => picker.Date = DateTimeToNSDate(arg3), nameof(UIDatePicker.ValueChanged)));

            //UISwitch
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UISwitch.On);
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UISwitch.On,
                (info, picker) => picker.On, (info, picker, arg3) => picker.On = arg3, nameof(UISwitch.ValueChanged)));

            //UIControl
            var clickMember = memberProvider.GetBindingMember(typeof(UIControl), nameof(UIControl.TouchUpInside), true, false);
            if (clickMember != null)
                memberProvider.Register(typeof(UIControl), "Click", clickMember, true);

            //UITextField
            BindingBuilderExtensions.RegisterDefaultBindingMember<UITextField>(nameof(UITextField.Text));
            NSNotificationCenter.DefaultCenter.AddObserver(UITextField.TextFieldTextDidChangeNotification, TextDidChangeNotification);
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITextField.TextChangedEvent, SetTextFieldTextChanged));

            //UITextView
            BindingBuilderExtensions.RegisterDefaultBindingMember<UITextView>(nameof(UITextView.Text));
            NSNotificationCenter.DefaultCenter.AddObserver(UITextView.TextDidChangeNotification, TextDidChangeNotification);
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITextView.TextChangedEvent, SetTextFieldTextChanged));

            //UILabel
            BindingBuilderExtensions.RegisterDefaultBindingMember<UILabel>(nameof(UILabel.Text));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UILabel.TextSizeToFit,
                (info, label) => label.Text,
                (info, label, arg3) =>
                {
                    label.Text = arg3;
                    label.SizeToFit();
                }));

            //UIViewController
            BindingServiceProvider.BindingMemberPriorities["ToolbarItemTemplate"] = BindingServiceProvider.TemplateMemberPriority;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UIViewController.ToolbarItemTemplateSelector] = BindingServiceProvider.TemplateMemberPriority;
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIViewController.ToastTemplateSelector));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIViewController.ToolbarItemsSource, ToolbarItemsSourceChanged));
            var templateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIViewController.ToolbarItemTemplateSelector);
            memberProvider.Register(templateMember);
            memberProvider.Register(typeof(UIViewController), "ToolbarItemTemplate", templateMember, true);
            memberProvider.Register(AttachedBindingMember.CreateMember<UIViewController, string>(nameof(UIViewController.Title),
                (info, controller) => controller.Title,
                (info, controller, arg3) => controller.Title = arg3 ?? string.Empty));
            memberProvider.Register(AttachedBindingMember.CreateMember<UIViewController, object>(AttachedMemberConstants.ParentExplicit,
                    (info, controller) => controller.ParentViewController ?? controller.PresentingViewController ?? controller.SplitViewController, null));

            //UITabBarController
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UITabBarController.ItemsSource);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITabBarController.SelectedItem, TabBarSelectedItemChanged, TabBarSelectedItemAttached));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITabBarController.ItemsSource, TabBarItemsSourceChanged));

            //UISplitViewController
            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;
                }));

            //UIToolbar
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override<UIToolbar>());
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override<UIToolbar>(), ToolbarItemsSourceChanged));

            //UIPickerView
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override<UIPickerView>());
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override<UIPickerView>(), PickerViewItemsSourceChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIPickerView.DisplayMemberPath, PickerViewDisplayMemberPathChangedChanged));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIPickerView.SelectedItem,
                    (info, view) => GetOrAddPickerViewModel(view).SelectedItem,
                    (info, view, arg3) => GetOrAddPickerViewModel(view).SelectedItem = arg3, (info, view, arg3) =>
                    {
                        var viewModel = GetOrAddPickerViewModel(view);
                        return BindingServiceProvider.WeakEventManager.TrySubscribe(viewModel, nameof(MvvmPickerViewModel.SelectedItemChanged), arg3);
                    }));
        }
 protected virtual IObserver CreateObserver(object source, string path, bool ignoreContext,
     IBindingMemberProvider memberProvider = null, IBindingContextManager contextManager = null, bool hasStablePath = false, bool observable = true, bool optional = false)
 {
     if (memberProvider != null)
         BindingServiceProvider.MemberProvider = memberProvider;
     if (contextManager != null)
         BindingServiceProvider.ContextManager = contextManager;
     var bindingPath = new BindingPath(path);
     if (bindingPath.IsEmpty)
         return new EmptyPathObserver(source, bindingPath);
     if (bindingPath.IsSingle)
         return new SinglePathObserver(source, bindingPath, ignoreContext, hasStablePath, observable, optional);
     return new MultiPathObserver(source, bindingPath, ignoreContext, hasStablePath, observable, optional);
 }
 private static void RegisterViewMembers(IBindingMemberProvider memberProvider)
 {
     //View            
     memberProvider.Register(AttachedBindingMember.CreateMember<View, object>(AttachedMemberConstants.FindByNameMethod, ViewFindByNameMember));
     memberProvider.Register(AttachedBindingMember.CreateMember<View, object>(AttachedMemberConstants.ParentExplicit, GetViewParentValue, null, ObserveViewParent));
     memberProvider.Register(AttachedBindingMember.CreateMember<View, bool>(AttachedMemberConstants.Focused,
             (info, view) => view.IsFocused, (info, view, arg3) =>
             {
                 if (arg3)
                     view.RequestFocus();
                 else
                     view.ClearFocus();
             }, "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(AttachedMembers.View.Visible,
         (info, view) => view.Visibility == ViewStates.Visible,
         (info, view, value) => view.Visibility = value ? ViewStates.Visible : ViewStates.Gone,
         ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.View.Hidden,
         (info, view) => view.Visibility != ViewStates.Visible,
         (info, view, value) => view.Visibility = value ? ViewStates.Gone : ViewStates.Visible,
         ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateAutoProperty<View, object>(AttachedMembers.Toolbar.MenuTemplate.Path));
 }
        private static void RegisterTableViewMembers(IBindingMemberProvider memberProvider)
        {
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewRowAnimation));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewScrollPosition));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewCellEditingStyle));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewCellAccessory));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewCellSelectionStyle));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewCellSeparatorStyle));
            BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewCellStyle));

            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.UseAnimations] = 2;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.AddAnimation] = 2;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.RemoveAnimation] = 2;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ReplaceAnimation] = 2;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ScrollPosition] = 2;
            BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.CellBind] = 2;

            //UITableView
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override<UITableView>());
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ReadOnly));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.CellBind));
            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.CellStyle));
            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);
            memberProvider.Register(itemTemplateMember);
            memberProvider.Register(typeof(UITableView), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);

            //UITableViewCell
            BindingBuilderExtensions.RegisterDefaultBindingMember<UITableViewCell>(() => c => c.TextLabel.Text);
            var member = AttachedBindingMember.CreateEvent(AttachedMembers.UITableViewCell.AccessoryButtonTappedEvent);
            memberProvider.Register(member);
            memberProvider.Register("Click", member);
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITableViewCell.DeleteClickEvent));
            memberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITableViewCell.InsertClickEvent));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableViewCell.Moveable));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableViewCell.TitleForDeleteConfirmation));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableViewCell.EditingStyle));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableViewCell.ShouldHighlight));
            memberProvider.Register(AttachedBindingMember.CreateNotifiableMember(
                AttachedMembers.UITableViewCell.Selected, (info, cell) =>
                {
                    if (TableViewSourceBase.HasMask(cell, TableViewSourceBase.InitializingStateMask))
                        return null;
                    var cellBindable = cell as UITableViewCellBindable;
                    if (cellBindable == null)
                        return cell.Selected;
                    return cellBindable.SelectedBind.GetValueOrDefault();
                }, (info, cell, arg3) =>
                {
                    var cellBindable = cell as UITableViewCellBindable;
                    if (cellBindable == null)
                        cell.Selected = arg3.GetValueOrDefault();
                    else
                        cellBindable.SelectedBind = arg3;
                    return true;
                }));
            memberProvider.Register(AttachedBindingMember.CreateNotifiableMember(
                AttachedMembers.UITableViewCell.Highlighted, (info, cell) => cell.Highlighted,
                (info, cell, arg3) =>
                {
                    if (cell.Highlighted == arg3)
                        return false;
                    cell.Highlighted = arg3;
                    return true;
                }));
            memberProvider.Register(AttachedBindingMember.CreateNotifiableMember(
                AttachedMembers.UITableViewCell.Editing, (info, cell) => cell.Editing,
                (info, cell, arg3) =>
                {
                    if (cell.Editing == arg3)
                        return false;
                    cell.Editing = arg3;
                    return true;
                }));
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember<TextBlock>(nameof(TextBlock.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember<TextBox>(nameof(TextBox.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember<Button>(nameof(Button.Click));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ComboBox>(nameof(ComboBox.ItemsSource));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ListBox>(nameof(ListBox.ItemsSource));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ProgressBar>(nameof(ProgressBar.Value));

            //UIElement
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIElement.Visible,
                    (info, view) => view.Visibility == Visibility.Visible,
                    (info, view, value) => view.Visibility = value ? Visibility.Visible : Visibility.Collapsed, ObserveVisiblityMember));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIElement.Hidden,
                    (info, view) => view.Visibility != Visibility.Visible,
                    (info, view, value) => view.Visibility = value ? Visibility.Collapsed : Visibility.Visible, ObserveVisiblityMember));

            //FrameworkElement
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, object>(AttachedMemberConstants.Parent, GetParentValue, SetParentValue, ObserveParentMember));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl));
#if SILVERLIGHT || WINDOWSCOMMON || WINDOWS_PHONE
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Focused,
                    (info, control) => FocusManager.GetFocusedElement() == control, null, nameof(FrameworkElement.LostFocus)));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<Control, bool>(AttachedMemberConstants.Enabled,
                    (info, control) => control.IsEnabled,
                    (info, control, value) => control.IsEnabled = value));
#else
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Focused,
                    (info, control) => control.IsFocused, null, nameof(FrameworkElement.LostFocus)));
            memberProvider.Register(AttachedBindingMember
                .CreateMember<FrameworkElement, bool>(AttachedMemberConstants.Enabled,
                    (info, control) => control.IsEnabled,
                    (info, control, value) => control.IsEnabled = value, nameof(FrameworkElement.IsEnabledChanged)));
#endif

            //TextBox
#if WINDOWSCOMMON
            memberProvider.Register(AttachedBindingMember.CreateMember<TextBox, string>(nameof(TextBox.Text),
                (info, box) => box.Text,
                (info, box, value) => box.Text = value ?? string.Empty, nameof(TextBox.TextChanged)));

            //TextBlock
            memberProvider.Register(AttachedBindingMember.CreateMember<TextBlock, string>(nameof(TextBlock.Text),
                (info, box) => box.Text,
                (info, box, value) => box.Text = value ?? string.Empty, ObserveTextTextBlock));
#else
            //WebBrowser
#if SILVERLIGHT
            memberProvider.Register(AttachedBindingMember.CreateMember<WebBrowser, Uri>(nameof(WebBrowser),
                            (info, browser) => browser.Source, (info, browser, arg3) => browser.Source = arg3));
#else
            memberProvider.Register(AttachedBindingMember.CreateMember<WebBrowser, Uri>(nameof(WebBrowser),
                            (info, browser) => browser.Source, (info, browser, arg3) => browser.Source = arg3, nameof(WebBrowser.Navigated)));
#endif
#endif
        }
        private static void Register(IBindingMemberProvider memberProvider)
        {
            BindingBuilderExtensions.RegisterDefaultBindingMember<Button>(nameof(Button.Click));
            BindingBuilderExtensions.RegisterDefaultBindingMember<TextBox>(nameof(TextBox.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember<Label>(nameof(Label.Text));
            BindingBuilderExtensions.RegisterDefaultBindingMember<CheckBox>(nameof(CheckBox.Checked));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ProgressBar>(nameof(ProgressBar.Value));

            //Object
            var itemsSourceMember = AttachedBindingMember.CreateAutoProperty<object, IEnumerable>(AttachedMemberConstants.ItemsSource, ObjectItemsSourceChanged);
            var defaultMemberRegistration = new DefaultAttachedMemberRegistration<IEnumerable>(itemsSourceMember);
            memberProvider.Register(defaultMemberRegistration.ToAttachedBindingMember<object>());
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.Object.CollectionViewManager));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty<object, IContentViewManager>(AttachedMembers.Control.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);
                    }
                    if (args.NewValue != null)
                        args.NewValue.SetItemsSource(itemsSource);
                }));

            var itemTemplateMember = AttachedBindingMember.CreateAutoProperty<object, IDataTemplateSelector>(AttachedMemberConstants.ItemTemplateSelector);
            memberProvider.Register(itemTemplateMember);
            memberProvider.Register(typeof(object), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true);

            //Form
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.Form.ToastTemplateSelector));

            //Control
            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);

            //DateTimePicker
            BindingBuilderExtensions.RegisterDefaultBindingMember<DateTimePicker>(nameof(DateTimePicker.Value));
            memberProvider.Register(AttachedBindingMember.CreateMember<DateTimePicker, DateTime>(nameof(DateTimePicker.Value),
                (info, picker) => picker.Value,
                (info, picker, value) =>
                {
                    if (value < picker.MinDate)
                        picker.Value = picker.MinDate;
                    else if (value > picker.MaxDate)
                        picker.Value = picker.MaxDate;
                    else
                        picker.Value = value;
                }, nameof(DateTimePicker.ValueChanged)));

            //ToolStripItem
            BindingBuilderExtensions.RegisterDefaultBindingMember<ToolStripButton>(nameof(ToolStripButton.Click));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ToolStripMenuItem>(nameof(ToolStripMenuItem.Click));
            BindingBuilderExtensions.RegisterDefaultBindingMember<ToolStripItem>(nameof(ToolStripItem.Text));
            memberProvider.Register(AttachedBindingMember.CreateMember<ToolStripItem, object>(AttachedMemberConstants.ParentExplicit,
                    GetParentToolStripItem, null, ObserveParentMemberToolStripItem));
            memberProvider.Register(AttachedBindingMember.CreateMember<ToolStripItem, object>(AttachedMemberConstants.FindByNameMethod,
                    FindByNameMemberToolStripItem));

            //TabControl
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Object.ItemsSource.Override<TabControl>());
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.TabControl.SelectedItem,
                GetSelectedItemTabControl, SetSelectedItemTabControl, nameof(TabControl.Selected)));

            //ComboBox
            BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Object.ItemsSource.Override<ComboBox>());
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.Object.ItemsSource.Override<ComboBox>(),
                    (info, box) => box.DataSource as IEnumerable,
                    (info, box, value) => box.DataSource = value, nameof(ComboBox.DataSourceChanged)));
            memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.ComboBox.SelectedItem,
                    (info, box) => box.SelectedItem, (info, box, value) => box.SelectedItem = value, nameof(ComboBox.SelectedIndexChanged)));

            //DataGridView
            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);
                    }));
        }
 private static void RegisterViewMembers(IBindingMemberProvider memberProvider)
 {
     //View
     memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.View.Fragment));
     memberProvider.Register(AttachedBindingMember.CreateMember<View, object>(AttachedMemberConstants.FindByNameMethod, ViewFindByNameMember));
     memberProvider.Register(AttachedBindingMember.CreateMember<View, object>(AttachedMemberConstants.Parent, GetViewParentValue, SetViewParentValue, ObserveViewParent));
     memberProvider.Register(AttachedBindingMember.CreateMember<View, bool>(AttachedMemberConstants.Focused,
             (info, view) => view.IsFocused, (info, view, arg3) =>
             {
                 if (arg3)
                     view.RequestFocus();
                 else
                     view.ClearFocus();
             }, nameof(View.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>(nameof(View.Visibility),
         (info, view) => view.Visibility, (info, view, value) => view.Visibility = value,
         ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.View.Visible,
         (info, view) => view.Visibility == ViewStates.Visible,
         (info, view, value) => view.Visibility = value ? ViewStates.Visible : ViewStates.Gone,
         ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.View.Hidden,
         (info, view) => view.Visibility != ViewStates.Visible,
         (info, view, value) => view.Visibility = value ? ViewStates.Gone : ViewStates.Visible,
         ObserveViewVisibility));
     memberProvider.Register(AttachedBindingMember.CreateAutoProperty<View, object>(AttachedMembers.Toolbar.MenuTemplate.Path));
     memberProvider.Register(AttachedBindingMember.CreateEvent<View>("WidthChanged", (info, o, arg3) => new SizeObserver(o, arg3)));
     memberProvider.Register(AttachedBindingMember.CreateEvent<View>("HeightChanged", (info, o, arg3) => new SizeObserver(o, arg3)));
 }
 protected virtual IObserver CreateObserver(object source, string path, bool ignoreContext,
     IBindingMemberProvider memberProvider = null, IBindingContextManager contextManager = null)
 {
     if (memberProvider != null)
         BindingServiceProvider.MemberProvider = memberProvider;
     if (contextManager != null)
         BindingServiceProvider.ContextManager = contextManager;
     var bindingPath = BindingPath.Create(path);
     if (bindingPath.IsEmpty)
         return new EmptyPathObserver(source, bindingPath);
     if (bindingPath.IsSingle)
         return new SinglePathObserver(source, bindingPath, ignoreContext);
     return new MultiPathObserver(source, bindingPath, ignoreContext);
 }