Idea is to create collection of buttons in user control.
So, first start new project (i.e. ItemsControl), and, for example, in same solution add new WPF User Control Library:

After enter XAML like:
<UserControl x:Class="MyItemsControl.MyItemsControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ItemsControl ItemsSource="{Binding MyTest}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="Test"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
Notice line:
<ItemsControl ItemsSource="{Binding MyTest}">
MyTest property will be hidden in another class (SomeAnotherClass), not in the main datacontext, which I will explain later.
Now, save, and build the solution. In main project (ItemsControl), in references add your user control (MyItemsControl):

Write XAML like:
<Window x:Class="ItemsControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myItemsControl="clr-namespace:MyItemsControl;assembly=MyItemsControl"
Title="MainWindow" Height="350" Width="525">
<Grid>
<myItemsControl:MyItemsControl DataContext="{Binding MyDataContext}"/>
</Grid>
</Window>
Notice line:
<myItemsControl:MyItemsControl DataContext="{Binding MyDataContext}"/>
In code behind of main project (ItemsControl) I wrote something like:
public MainWindow()
{
ItemsControlViewModel icvm;
icvm = new ItemsControlViewModel();
this.DataContext = icvm;
InitializeComponent();
}
Then class ItemsControlViewModel looks like:
public class ItemsControlViewModel
{
public SomeAnotherClass MyDataContext { get; set; }
public ItemsControlViewModel()
{
MyDataContext = new SomeAnotherClass();
}
}
Notice that here I created MyDataContext as a property, and I referenced that class to another class (SomeAnotherClass) which looks like:
public class SomeAnotherClass
{
public IEnumerable<string> MyTest { get; set; }
public SomeAnotherClass()
{
MyTest = new[] { "test" };
}
}
Here notice:
public IEnumerable<string> MyTest { get; set; }
Which is property called from my user control, also notice that is of the type IEnumerable, that is because it is binded to ItemsControl.
Here you can download example.