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.