Цель Grid не для реальной привязки данных, это просто панель. Я перечисляю самый простой способ выполнить визуализацию двумерного списка
<Window.Resources>
<DataTemplate x:Key="DataTemplate_Level2">
<Button Content="{Binding}" Height="40" Width="50" Margin="4,4,4,4"/>
</DataTemplate>
<DataTemplate x:Key="DataTemplate_Level1">
<ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource DataTemplate_Level2}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
</Window.Resources>
<Grid>
<ItemsControl x:Name="lst" ItemTemplate="{DynamicResource DataTemplate_Level1}"/>
</Grid>
. И в коде, за которым стоит набор ItemsSource lst с структурой TwoDimentional.
public Window1()
{
List<List<int>> lsts = new List<List<int>>();
for (int i = 0; i < 5; i++)
{
lsts.Add(new List<int>());
for (int j = 0; j < 5; j++)
{
lsts[i].Add(i * 10 + j);
}
}
InitializeComponent();
lst.ItemsSource = lsts;
}
Это дает вам следующий экран в качестве вывода. Вы можете отредактировать DataTemplate_Level2, чтобы добавить более конкретные данные вашего объекта.
[/g0]
Размещение файлов Kotlin в отдельном исходном каталоге существует как документированная возможность, потому что в ранних (до 1.0) версиях Kotlin это была единственная поддерживаемая установка. После этого плагин Kotlin Gradle стал более гибким, поэтому разделение каталогов больше не требуется. Мне неизвестны какие-либо преимущества, которые можно получить, поместив файлы Kotlin в отдельный каталог с исходными текстами.
Наличие отдельного исходного каталога особенно неудобно, когда у вас есть проект Java, который вы постепенно конвертируете в Kotlin. Перемещение каждого преобразованного файла в другой исходный каталог делает процесс преобразования излишне громоздким.