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