MonoMobile.Views.ComposableViewListCell.CreateViewList C# (CSharp) Méthode

CreateViewList() protected méthode

protected CreateViewList ( IList viewTypes ) : void
viewTypes IList
Résultat void
		protected void CreateViewList(IList<Type> viewTypes)
		{
			var frame = new RectangleF(0, 0, ContentView.Bounds.Width, ContentView.Bounds.Height);
			
			if (ViewList != null)
			{
				foreach(var view in ViewList)
				{
					view.Dispose();
				}

				ViewList.Clear();
				ViewList = null;
			}
			
			ViewList = new List<UIView>();

			if (viewTypes != null)
			{
				foreach (var viewType in viewTypes)
				{
					if (viewType == null) continue;

					UIView view = null;
					var hasFrameCtor = viewType.GetConstructor(new Type[] { typeof(RectangleF) }) != null;
					if (hasFrameCtor)
					{
						view = Activator.CreateInstance(viewType, new object[] { frame }) as UIView;
						
						if (ListSource.RowHeights[ListSource.BaseIndexPath] != view.Frame.Height)
						{
							if (ListSource.RowHeights.ContainsKey(IndexPath))
							{
								ListSource.RowHeights[IndexPath] = view.Frame.Height;
							}
							else
							{
								ListSource.RowHeights.Add(IndexPath, view.Frame.Height);
							}
						}
					}
					else
					{
						view = Activator.CreateInstance(viewType) as UIView;
					}
					
					var dc = view as IDataContext<object>;
					if (dc != null)
					{
						var item = ListSource.GetSectionData(0)[IndexPath.Row];
						dc.DataContext = item;
					}

					var initializeCell = view as IInitializeCell;
					if (initializeCell != null)
					{	
						initializeCell.Cell = this;
						initializeCell.Controller = ListSource.Controller;

						var newCellStyle = initializeCell.CellStyle;
						if (newCellStyle != Style)
						{
							Style = newCellStyle;
							break;
						}
					}
					
					var themeable = view as IThemeable;
					if (themeable != null)
					{
						if (themeable.Theme == null)
						{
							var theme = view.GetType().GetCustomAttribute<ThemeAttribute>();
							if (theme != null)
							{
								var cellViewTheme = Theme.CreateTheme(theme.ThemeType);
								if (cellViewTheme != null)
								{
									if (Theme != null)
									{
										Theme.MergeTheme(cellViewTheme);
									}
									else
									{
										Theme = cellViewTheme;
									}

									themeable.Theme = Theme;
								}
							}
						}
						
						themeable.InitializeTheme(this);
					}

					var cellContent = view as ICellContent;
					if (cellContent != null)
					{
						if (cellContent.CellContentView != null)
						{
							_CompositeView.AddSubview(cellContent.CellContentView);
						}
					}
					
					ViewList.Add(view);
				}
			}
		}