Вот что у меня сработало. Обратите внимание, что столбцы сбрасываются на основе rowCount после его обнаружения в строке, которую я пометил (// Добавленная строка). Вы можете видеть, что я использую screenWidth и itemWidth, чтобы вычислить мое количество столбцов.
Проблема возникает, когда количество пустых элементов превышает количество строк. Если у меня есть 8 столбцов и 17 записей, я получаю 3 строки (Ceiling (17/8) = 3). Это проблема (3 * 8) - 17 = 7 пустых записей. И вот что происходит:
RECORD RECORD RECORD RECORD RECORD RECORD ------ ------
RECORD RECORD RECORD RECORD RECORD RECORD ------ ------
RECORD RECORD RECORD RECORD RECORD ------ ------ ------
Так как строк 3, то строка кода, которую я добавил, исправляет некоторые вещи:
columnCount = Math.Ceiling(itemCount / rowCount);
columnCount = 17/3 Ceiling = 6 (столбцы), поэтому мой макет отображается следующим образом (мой клиент определяет ширину).
RECORD RECORD RECORD RECORD RECORD RECORD
RECORD RECORD RECORD RECORD RECORD RECORD
RECORD RECORD RECORD RECORD RECORD ------
Надеюсь, это поможет любому, кто столкнулся с моей проблемой.
private List<CompanyCourseViewModel> Reorder(List<CompanyCourseViewModel> courses, Decimal width, Decimal itemWidth)
{
var list = new List<CompanyCourseViewModel>();
var columnCount = Math.Floor(width / itemWidth);
var itemCount = courses.Count();
var rowCount = Math.Ceiling(itemCount / columnCount);
columnCount = Math.Ceiling(itemCount / rowCount); // Added line.
for (var i = 0; i < rowCount * columnCount; i++)
{
var index = (int) ((i%columnCount) * rowCount + Math.Floor(i/columnCount));
if (index < itemCount)
{
courses[index].NumColumns = (int) columnCount;
list.Add(courses[index]);
}
else
{
list.Add(new CompanyCourseViewModel()
{
Id = -Math.Abs(i - courses.Count()),
Title = "----",
NumColumns = (int)columnCount
});
}
}
return list;
}