protected override bool LoadInternal()
        {
            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.View.DrawerIsOpened,
                ViewDrawerIsOpenedChanged, getDefaultValue: ViewDrawerIsOpenedGetDefaultValue));

            //Toolbar
            memberProvider.Register(
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.MenuTemplate,
                    ToolbarMenuTemplateChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.IsActionBar,
                ToolbarIsActionBarChanged));

            //DrawerLayout
            INotifiableAttachedBindingMemberInfo<DrawerLayout, bool> actionBarDrawerToggleEnabledMember =
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.ActionBarDrawerToggleEnabled,
                    (layout, args) =>
                    {
                        if (!args.NewValue)
                            return;
                        Activity activity = layout.Context.GetActivity();
                        if (activity != null)
                            DrawerListenerImpl
                                .GetOrAdd(layout)
                                .SetListener(activity, new ActionBarDrawerToggle(activity, layout, Resource.String.Empty, Resource.String.Empty));
                    });
            memberProvider.Register(actionBarDrawerToggleEnabledMember);
            memberProvider.Register(typeof(DrawerLayout), "ActionBarDrawerEnabled", actionBarDrawerToggleEnabledMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.DrawerListener,
                (layout, args) =>
                {
                    var listener = args.NewValue as DrawerLayout.IDrawerListener;
                    if (listener == null)
                    {
                        var func = args.NewValue as Func<DrawerLayout, DrawerLayout.IDrawerListener>;
                        if (func != null)
                            listener = func(layout);
                    }
                    if (listener == null)
                        Tracer.Warn("The DrawerListener '{0}' is not supported", args.NewValue);
                    DrawerListenerImpl.GetOrAdd(layout).SetListener(layout.Context, listener);
                }));


            //ViewPager
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.SelectedItem, ViewPagerSelectedItemChanged,
                (pager, args) =>
                {
                    //NOTE to activate listener
                    pager.GetBindingMemberValue(AttachedMembersCompat.ViewPager.CurrentItem);
                }));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.GetPageTitleDelegate));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.RestoreSelectedIndex));
            var itemMember = AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.CurrentItem,
                ViewPagerCurrentItemChanged, AdapterViewCurrentItemAttached, (pager, info) => pager.CurrentItem);
            memberProvider.Register(itemMember);
            memberProvider.Register(typeof(ViewPager), "SelectedIndex", itemMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.ItemsSource.Override<ViewPager>(),
                    (pager, args) =>
                    {
                        var pagerAdapter = pager.Adapter as ItemsSourcePagerAdapter;
                        if (pagerAdapter == null)
                        {
                            pagerAdapter = new ItemsSourcePagerAdapter(pager);
                            pager.Adapter = pagerAdapter;
                        }
                        pagerAdapter.ItemsSource = args.NewValue;
                        if (pagerAdapter.Count > 0 && pager.GetBindingMemberValue(AttachedMembersCompat.ViewPager.SelectedItem) == null)
                            pager.SetBindingMemberValue(AttachedMembersCompat.ViewPager.SelectedItem, pagerAdapter.GetRawItem(0));
                    }));
            return true;
        }
        /// <summary>
        ///     Loads the current module.
        /// </summary>
        protected override bool LoadInternal()
        {
            PlatformExtensions.LayoutInflaterFactory = (context, dataContext, factory, inflater) =>
            {
                if (factory == null && !ServiceProvider.IocContainer.TryGet(out factory))
                    factory = new ViewFactory();
                if (inflater == null)
                    return new BindableLayoutInflaterCompat(factory, context);
                return new BindableLayoutInflaterCompat(factory, inflater);
            };

            IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider;

            //View
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.View.DrawerIsOpened,
                ViewDrawerIsOpenedChanged, getDefaultValue: ViewDrawerIsOpenedGetDefaultValue));

            //Toolbar
            memberProvider.Register(
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.MenuTemplate,
                    ToolbarMenuTemplateChanged));
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.IsActionBar,
                ToolbarIsActionBarChanged));

            //DrawerLayout
            INotifiableAttachedBindingMemberInfo<DrawerLayout, bool> actionBarDrawerToggleEnabledMember =
                AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.ActionBarDrawerToggleEnabled,
                    (layout, args) =>
                    {
                        if (!args.NewValue)
                            return;
                        Activity activity = layout.Context.GetActivity();
                        if (activity == null)
                            return;
                        DrawerListenerImpl
                            .GetOrAdd(layout)
                            .SetListener(activity, new ActionBarDrawerToggle(activity, layout, Resource.String.Empty, Resource.String.Empty));
                    });
            memberProvider.Register(actionBarDrawerToggleEnabledMember);
            memberProvider.Register(typeof(DrawerLayout), "ActionBarDrawerEnabled", actionBarDrawerToggleEnabledMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.DrawerLayout.DrawerListener,
                (layout, args) =>
                {
                    var listener = args.NewValue as DrawerLayout.IDrawerListener;
                    if (listener == null)
                    {
                        var func = args.NewValue as Func<DrawerLayout, DrawerLayout.IDrawerListener>;
                        if (func != null)
                            listener = func(layout);
                    }
                    if (listener == null)
                        Tracer.Warn("The DrawerListener '{0}' is not supported", args.NewValue);
                    DrawerListenerImpl.GetOrAdd(layout).SetListener(layout.Context, listener);
                }));


            //ViewPager
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.SelectedItem, ViewPagerSelectedItemChanged));
            var itemMember = AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.ViewPager.CurrentItem,
                ViewPagerCurrentItemChanged, AdapterViewCurrentItemAttached, (pager, info) => pager.CurrentItem);
            memberProvider.Register(itemMember);
            memberProvider.Register(typeof(ViewPager), "SelectedIndex", itemMember, true);
            memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.ItemsSource.Override<ViewPager>(),
                    (pager, args) =>
                    {
                        var pagerAdapter = pager.Adapter as ItemsSourcePagerAdapter;
                        if (pagerAdapter == null)
                        {
                            pagerAdapter = new ItemsSourcePagerAdapter(pager);
                            pager.Adapter = pagerAdapter;
                        }
                        pagerAdapter.ItemsSource = args.NewValue;
                    }));
            return true;
        }