コード例 #1
0
 public static void SetFactory(LayoutInflater inflater, IViewFactory factory)
 {
     if (PlatformExtensions.IsApiGreaterThan10)
     {
         if (inflater.Factory is LayoutInflaterFactoryWrapper && inflater.Factory2 is LayoutInflaterFactoryWrapper)
             return;
     }
     else
     {
         if (inflater.Factory is LayoutInflaterFactoryWrapper)
             return;
     }
     if (factory == null && !ServiceProvider.TryGet(out factory))
         factory = new ViewFactory();
     var factoryWrapper = new LayoutInflaterFactoryWrapper(inflater, factory);
     FactoryField.Set(inflater, factoryWrapper);
     if (Factory2Field != null)
         Factory2Field.Set(inflater, factoryWrapper);
 }
コード例 #2
0
        protected override bool LoadInternal()
        {
            PlatformExtensions.LayoutInflaterFactory = (context, dataContext, factory, inflater) =>
            {
                if (factory == null && !ServiceProvider.TryGet(out factory))
                    factory = new ViewFactory();
                if (inflater == null)
                    return new BindableLayoutInflaterCompat(factory, context);
                return new BindableLayoutInflaterCompat(factory, inflater, context);
            };

            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));
            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;
                    }));
            return true;
        }