C# Binding list of objects to ItemsControl with custom ItemTemplate in MVVM
===

# Current Setup #

I have a custom class representing an installer file and some properties about that file, conforming to the following interface

    public interface IInstallerObject
    {
        string FileName { get; set; }
        string FileExtension { get; set; }
        string Path { get; set; }
        int Build { get; set; }
        ProductType ProductType { get; set; }
        Architecture ArchType { get; set; }
        bool Configurable { get; set; }
        int AverageInstallTime { get; set; }
        bool IsSelected { get; set; }
    }

My `ViewModel` has a `ReadOnlyObservableCollection<IInstallerObject>` property named `AvailableInstallerObjects`.

My `View` has a `GroupBox` containing the `ItemsControl` which binds to the aforementioned property.

        <GroupBox Header="Products">
            <ItemsControl ItemsSource="{Binding Path=AvailableInstallerObjects}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox IsChecked="{Binding Path=IsSelected}"
                                      VerticalAlignment="Center" Margin="5"/>
                            <TextBlock Text="{Binding Path=FileName}" Margin="5" />
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </GroupBox>

The binding works correctly, except it's not user friendly. 100+ items are shown.

# Need Help Here #

I'd like to be able to use my collection of `IInstallerObject`s but have the `View` present them with the following `ItemTemplate` structure.

        <GroupBox Header="Products">
            <ItemsControl ItemsSource="{Binding Path=AvailableInstallerObjects}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <CheckBox IsChecked="{Binding Path=IsSelected}"
                                      VerticalAlignment="Center" Margin="5"/>
                            <TextBlock Text="{Binding Path=ProductType}" Margin="5" />
                            <ComboBox ItemsSource="{Binding Path=Build}" />
                        </StackPanel>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </GroupBox>

Basically I want to be able to group by the `ProductType` property, showing a list of the available products, with the `ComboBox` representing the available `Build` property values for `IInstallerObject`s of the `ProductType`.

I can use `LINQ` in the `ViewModel` to extract the groupings, but I have no idea how I'd bind to what I've extracted.

My research also turned up the possibility of using a `CollectionViewSource` but I'm not certain on how I can apply that to my current setup. 



*I appreciate your help in advance. I'm willing to learn so if I've overlooked something obvious please direct me to the information and I'll gladly educate myself.*