Bind ItemsControl to a collection of ViewModels on a ViewModel
<p>This is my first time posting a question.  I've simplified my code as much as possible to illustrate what I'm looking for.</p>

<p>I have a ViewModel (outer) that contains an ObservableCollection of another ViewModel (inner).  The inner ViewModel is for a UserControl.  The outer ViewModel is for MainWindow.  I simply want to display one UserControl for each item in the ObservableCollection.  But, I'm having trouble getting the UserControl's DataContext set to the items in the ObservableCollection.</p>

<p>Inner ViewModel (for UserControl):</p>

<pre><code>public class InnerViewModel : ViewModelBase
{
    string _text;

    public string Text
    {
        get { return _text; }
        set { SetProperty&lt;string&gt;(ref _text, value); }
    }

    public InnerViewModel() { }
}
</code></pre>

<p>Inner ViewModel (for UserControl):</p>

<pre><code>public class OuterViewModel : ViewModelBase
{
    ObservableCollection&lt;InnerViewModel&gt; _innerViewModels;

    public ObservableCollection&lt;InnerViewModel&gt; InnerViewModels
    {
        get { return _innerViewModels; }
        set { SetProperty&lt;ObservableCollection&lt;InnerViewModel&gt;&gt;(ref _innerViewModels, value); }
    }

    public OuterViewModel()
    {
        _innerViewModels = new ObservableCollection&lt;InnerViewModel&gt;();
    }

    public void Init()
    {
        InnerViewModels.Clear();
        InnerViewModels.Add(new InnerViewModel { Text = "Item1" });
        InnerViewModels.Add(new InnerViewModel { Text = "Item2" });
    }
}
</code></pre>

<p>InnerControl XAML (outermost tag removed for cleanliness)</p>

<pre><code>&lt;UserControl.DataContext&gt;
    &lt;local:InnerViewModel /&gt;
&lt;/UserControl.DataContext&gt;
&lt;Grid&gt;
    &lt;Grid.ColumnDefinitions&gt;
        &lt;ColumnDefinition Width="50px"&gt;&lt;/ColumnDefinition&gt;
        &lt;ColumnDefinition &gt;&lt;/ColumnDefinition&gt;
        &lt;ColumnDefinition Width="50px"&gt;&lt;/ColumnDefinition&gt;
    &lt;/Grid.ColumnDefinitions&gt;
    &lt;Label Content="Header"&gt;&lt;/Label&gt;
    &lt;Label Grid.Column="1" Content="{Binding Text}" &gt;&lt;/Label&gt;
    &lt;Label Grid.Column="2" Content="Footer"&gt;&lt;/Label&gt;
&lt;/Grid&gt;
</code></pre>

<p>MainWindow XAML </p>

<pre><code>&lt;Window.DataContext&gt;
    &lt;local:OuterViewModel /&gt;
&lt;/Window.DataContext&gt;
&lt;Grid&gt;
    &lt;ItemsControl ItemsSource="{Binding InnerViewModels}"&gt;
        &lt;ItemsControl.ItemTemplate&gt;
            &lt;DataTemplate&gt;
                &lt;local:InnerControl&gt;&lt;/local:InnerControl&gt; &lt;!-- HOW DO I SET THE DATACONTEXT ON THIS??? --&gt;
            &lt;/DataTemplate&gt;
        &lt;/ItemsControl.ItemTemplate&gt;
    &lt;/ItemsControl&gt;
&lt;/Grid&gt;
</code></pre>

<p>InnerControl.cs Code:</p>

<pre><code>public partial class InnerControl : UserControl
{
    public InnerControl()
    {
        InitializeComponent();
    }
}
</code></pre>

<p>MainWindow.cs Code:</p>

<pre><code>public partial class MainWindow : Window
{
    OuterViewModel _vm;

    public MainWindow()
    {
        InitializeComponent();

        _vm = (OuterViewModel)DataContext;
        _vm.Init();
    }
}
</code></pre>

<p>ViewModelBase:</p>

<pre><code>public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected bool SetProperty&lt;T&gt;(ref T storage, T value, [CallerMemberName] String propertyName = null)
    {
        if (Equals(storage, value))
        {
            return false;
        }

        storage = value;
        this.OnPropertyChanged(propertyName);
        return true;
    }

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler eventHandler = this.PropertyChanged;
        if (eventHandler != null)
        {
            eventHandler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
</code></pre>

<p>Result:
<a href="http://i.stack.imgur.com/UqPKJ.png" rel="nofollow">Screenshot of what I get when I run</a></p>