Я бы использовал ItemsControl
и настроил бы его ItemsPanelTemplate
на то, что вы хотите.
ItemsControls
предназначены для итерации коллекции объектов и отображения их в любой форме.Я написал несколько простых примеров кода из них здесь , если вам интересно, или вот еще один быстрый пример:
<DockPanel x:Name="RootPanel">
<Button Style="{StaticResource AddButtonStyle}"
DockPanel.Dock="Right" VerticalAlignment="Center"
Command="{Binding AddItemCommand" />
<ScrollViewer>
<ItemsControl ItemsSource="{Binding MyCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<local:MyUserControl />
<Button Style="{StaticResource RemoveButtonStyle}"
Command="{Binding ElementName=RootPanel, Path=DataContext.RemoveItemCommand}"
CommandParameter="{Binding }"
HorizontalAlignment="Left" VerticalAlignment="Top" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</DockPanel>
Ваш ItemsControl будет связан с ObservableCollection
объектовВаши кнопки Добавить / Удалить просто добавят / удалят элементы из этой коллекции.Поскольку это ObservableCollection
, он будет уведомлять пользовательский интерфейс об изменении коллекции и автоматически обновлять.