Частичное решение, которое я нашел до сих пор, состоит в том, чтобы использовать TabControl с ItemsSource, привязанным к CollectionView.Groups, и внутри TabControl.ContentTemplate использовать ItemsControl, привязанный к текущей группе Items:
<TabControl ItemsSource="{Binding MyItems, Converter={StaticResource CollectionToViewGroupsConverter}}"
SelectedIndex="0">
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl>
<ItemsControl ItemsSource="{Binding Items}"/>
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Где конвертер:
public class CollectionToViewGroupsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var view = CollectionViewSource.GetDefaultView(value);
if (view == null)
return null;
return view.Groups;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
К сожалению, это все часть другого шаблона, и мой ItemsControl содержит много ссылок на TemplatedParent, которые теперь недопустимы, поскольку теперь это шаблон для TabControl.