private static bool MenuItemUpdateActionView(IBindingMemberInfo bindingMemberInfo, IMenuItem menuItem, object content) { var actionView = menuItem.GetActionView(); if (actionView != null) { ParentObserver.GetOrAdd(actionView).Parent = null; } var selector = MenuItemActionViewSelectorMember.GetValue(menuItem, null); if (selector != null) { object template = selector.SelectTemplate(content, menuItem); if (template != null) { content = template; } } if (content == null) { menuItem.SetActionView(null); return(true); } int viewId; if (int.TryParse(content.ToString(), out viewId)) { menuItem.SetActionView(viewId); actionView = menuItem.GetActionView(); } else { actionView = content as View; if (actionView == null) { Type viewType = TypeCache <View> .Instance.GetTypeByName(content.ToString(), false, true); actionView = viewType.CreateView(GetContextFromMenuItem(menuItem)); } menuItem.SetActionView(actionView); } ParentObserver.GetOrAdd(actionView).Parent = menuItem; var bindings = MenuItemTemplate.GetActionViewBind(menuItem); if (!string.IsNullOrEmpty(bindings)) { BindingServiceProvider.BindingProvider.CreateBindingsFromString(actionView, bindings, null); } return(true); }
private static bool MenuItemUpdateActionView(IBindingMemberInfo bindingMemberInfo, IMenuItem menuItem, object content) { var actionView = menuItem.GetActionView(); if (actionView != null) { ParentObserver.Set(actionView, null); } object template = menuItem.GetBindingMemberValue(AttachedMembers.MenuItem.ActionViewTemplateSelector)?.SelectTemplate(content, menuItem); if (template != null) { content = template; } if (content == null) { #if APPCOMPAT MenuItemCompat.SetActionView(menuItem, null); #else menuItem.SetActionView(null); #endif return(true); } LayoutInflaterResult result = null; int viewId; if (int.TryParse(content.ToString(), out viewId)) { result = GetContextFromItem(menuItem).GetBindableLayoutInflater().InflateEx(viewId, null, false); content = result.View; } actionView = content as View; if (actionView == null) { Type viewType = TypeCache <View> .Instance.GetTypeByName(content.ToString(), true, true); actionView = viewType.CreateView(GetContextFromItem(menuItem)); } #if APPCOMPAT MenuItemCompat.SetActionView(menuItem, actionView); #else menuItem.SetActionView(actionView); #endif ParentObserver.Set(actionView, menuItem); var bindings = GetActionViewBind(menuItem); if (!string.IsNullOrEmpty(bindings)) { BindingServiceProvider.BindingProvider.CreateBindingsFromString(actionView, bindings, null); } result?.ApplyBindings(); return(true); }
private static bool MenuItemUpdateActionView(IBindingMemberInfo bindingMemberInfo, IMenuItem menuItem, object content) { var actionView = menuItem.GetActionView(); if (actionView != null) { ParentObserver.GetOrAdd(actionView).Parent = null; } object template = menuItem.GetBindingMemberValue(AttachedMembers.MenuItem.ActionViewTemplateSelector)?.SelectTemplate(content, menuItem); if (template != null) { content = template; } if (content == null) { menuItem.SetActionView(null); return(true); } int viewId; if (int.TryParse(content.ToString(), out viewId)) { content = GetContextFromItem(menuItem).GetBindableLayoutInflater().Inflate(viewId, null); } actionView = content as View; if (actionView == null) { Type viewType = TypeCache <View> .Instance.GetTypeByName(content.ToString(), true, true); actionView = viewType.CreateView(GetContextFromItem(menuItem)); } menuItem.SetActionView(actionView); ParentObserver.GetOrAdd(actionView).Parent = menuItem; var bindings = GetActionViewBind(menuItem); if (!string.IsNullOrEmpty(bindings)) { BindingServiceProvider.BindingProvider.CreateBindingsFromString(actionView, bindings, null); } return(true); }