Создайте список элементов в вашей ViewModel, например,
public IEnumerable<string> Values { get; set; } = new List<string> { "x", "c", "v", "..." };
И присвойте его ItemsControl
<ItemsControl x:Name="Row" Grid.Row="4" ItemsSource="{Binding Values}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding }"
Command="{Binding Path=DataContext.ButtonClickCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding }"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ItemsControl.ItemsPanel
, который говорит, какой контейнер использовать для этихitems и ItemTemplate
определяет, как должен выглядеть каждый элемент StackPanel
.
Связывание внутри DataTemplate
относится к string
, поэтому для того, чтобы добраться до ButtonClickCommand
, мы должны вернуться кItemsControl
контекст.