private static CommandBarButtonItem CreateCommandBarButton(object view, MemberInfo member, string title, UIView buttonView, UIBarButtonItemStyle style, UIBarButtonSystemItem? buttonType, BarButtonLocation location)
{
ICommandInterceptor commandInterceptor = null;
CommandBarButtonItem button = null;
ReflectiveCommand command = null;
var methodInfo = member as MethodInfo;
if(methodInfo != null)
{
command = GetCommandForMember(view, member);
var cellViewTemplates = member.GetCustomAttributes<CellViewTemplate>();
if (cellViewTemplates.Length > 0)
{
var interceptorTemplate = cellViewTemplates
.FirstOrDefault((template) => template.CellViewType != null && template.CellViewType.GetInterfaces()
.Any((type)=> type == typeof(ICommandInterceptor))) as CellViewTemplate;
if (interceptorTemplate != null)
{
commandInterceptor = Activator.CreateInstance(interceptorTemplate.CellViewType) as ICommandInterceptor;
}
}
}
if (!string.IsNullOrEmpty(title))
{
button = new CommandBarButtonItem(title, style);
}
else if (buttonView != null)
{
button = new CommandBarButtonItem(buttonView);
}
else
{
if (!buttonType.HasValue)
buttonType = UIBarButtonSystemItem.Done;
button = new CommandBarButtonItem(buttonType.Value);
button.Style = style;
}
command.CommandButton = button;
button.Enabled = true;
button.Location = location;
button.Command = command;
button.CommandInterceptor = commandInterceptor;
var orderAttribute = member.GetCustomAttribute<OrderAttribute>();
if (orderAttribute != null)
button.Order = orderAttribute.Order;
else
button.Order = 0;
return button;
}