MonoMobile.Views.ViewParser.ParseList C# (CSharp) Method

ParseList() public static method

public static ParseList ( DialogViewController controller, MemberData memberData, List viewTypes ) : UITableViewSource
controller DialogViewController
memberData MemberData
viewTypes List
return UITableViewSource
		public static UITableViewSource ParseList(DialogViewController controller, MemberData memberData, List<Type> viewTypes)
		{
			object memberValue = memberData.Value;
			var member = memberData.Member;
			var type = memberData.Type;

			var isList = typeof(IEnumerable).IsAssignableFrom(type) || typeof(Enum).IsAssignableFrom(type);
			if (isList)
			{
				var data = type.CreateGenericListFromEnumerable(memberValue);
				var source = new ListSource(controller, (IList)data, viewTypes);

				if (source != null)
				{
					if (type.IsEnum)
					{
						source.SelectedItem = memberValue;
						source.SelectedItems.Add(source.SelectedItem);
					}
					else if (data != null && data.Count == 1)
					{
						source.SelectedItem = data[0];
						source.SelectedItems.Add(source.SelectedItem);
					}

					source.Caption = GetCaption(member);

					var listAttribute = member.GetCustomAttribute<ListAttribute>();
					if (listAttribute != null)
					{
						source.DisplayMode = listAttribute.DisplayMode;
						source.SelectionAction = listAttribute.SelectionAction;

						source.IsMultiselect = listAttribute.SelectionAction == SelectionAction.Multiselection;
						source.IsSelectable = source.SelectionAction != SelectionAction.NavigateToView;
						source.IsNavigable = listAttribute.DisplayMode != DisplayMode.Collapsable || listAttribute.SelectionAction == SelectionAction.NavigateToView;

						source.SelectedAccessoryViewType = listAttribute.SelectedAccessoryViewType;
						source.UnselectedAccessoryViewType = listAttribute.UnselectedAccessoryViewType;
						source.UnselectionBehavior = listAttribute.UnselectionBehavior;

						source.ReplaceCaptionWithSelection = listAttribute.ReplaceCaptionWithSelection;
						
						if (!string.IsNullOrEmpty(listAttribute.SelectedItemMemberName)) 
						{
							source.SelectedItemMemberName = listAttribute.SelectedItemMemberName;
						}
						if (!string.IsNullOrEmpty(listAttribute.SelectedItemsMemberName))
						{
							source.SelectedItemsMemberName = listAttribute.SelectedItemsMemberName;
						}
					}						
	
					source.PopOnSelection = source.SelectionAction == SelectionAction.PopOnSelection;
					
					var memberAttributes = member.GetCustomAttributes(false);
					foreach(var memberAttribute in memberAttributes)
					{
						var navigable = memberAttribute as INavigable;
						if (navigable != null)
						{
							source.IsSelectable = false;
							source.NavigationViewType = navigable.NavigateToViewType;

							source.IsNavigable = navigable.NavigateToViewType != null;
						}
					}

					source.IsRootCell = source.DisplayMode != DisplayMode.List;

					return source;
				}
			}

			return null;
		}