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