In my ViewModel I have a collection of objects which each contain another collection. I am trying to display this in my View by using nested ListView ItemTemplates. Here is a simplification of my ViewModel code:
public ViewModelObject
{
    public ObservableCollection<OuterObject> OuterCollection { get; }
}
public OuterObject
{
    public string OuterTitle;
    public ObservableCollection<InnerObject> InnerCollection { get; }
}
public InnerObject
{
    public string InnerTitle;
}
And here is a simplification of how I'm trying to use this ViewModel in my XAML:
<ListView ItemsSource="{Binding OuterCollection}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding OuterTitle}"/>
                <ListView ItemsSource="{Binding InnerCollection}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding InnerTitle}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
If I remove the inner ListView, the outer ListView binding works perfectly fine. I just can't figure out how to properly bind the inner collection object to the inner ListView. I've tried doing the inner binding with {Binding OuterCollection.InnerCollection}, {Binding DataContext.InnerCollection}, and {Binding RelativeSource={RelativeSource TemplatedParent}, Path=InnerCollection}, but all of these cause it to crash. What is the proper way to achieve this nested binding?
EDIT: I should add that this is for an application being ported from Windows Phone 7, and it is an attempt to find a replacement for LongListSelector, which is not available in WinRT.
I figured out the solution! It required a combination of my previously attempted solutions. The correct binding for the internal collection in a nested ListView is:
{Binding RelativeSource={RelativeSource TemplatedParent},
                         Path=DataContext.InnerCollection}
Also, depending on your purpose for the nested ListViews, I found it better to use an ItemsView for the outer collection and a ListView for the inner collection. Otherwise, the selectability of the two controls overlap each other.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With