Вам необходимо создать список, используя WrapPanel в качестве ItemsPanel. В XAML вы можете делать следующее:
<ListBox Name="MyList" ItemsSource={StaticResource YourList}>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Height="40" MinWidth="40" Content="{Binding Id}" Click="Button_Click"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
В этом примере я предполагаю, что YourList является списком покупаемых элементов. Вы также можете установить ItemsSource из кода (то есть: MyList.ItemsSource = YourList;). Когда вы нажмете кнопку, она вызовет следующее, которое может отобразить окно сообщения, содержащее все, что вам нужно:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(((sender as Button).DataContext as PurchasedItem).Product.Name);
}
Обратите внимание, что для Контента кнопки я установил Id для элемента PurchaseagedItem, поэтому вы, вероятно, захотите изменить это.