Create a listbox with a Listview for the data template in your xaml code:
<Grid>
<ListBox Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" Name="lbxTasks" VerticalAlignment="Top" Width="120">
<ListBox.GroupStyle>
<GroupStyle />
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Queue}" BorderThickness="0"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Then for your code behind, create and bind the lists. This is an example to test with:
namespace WpfApplication3
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
List<string> pending = new List<string> {"1","2"};
List<string> busy = new List<string> { "4", "5" };
List<string> completed = new List<string> { "7", "8" };
private List<Tasks> MyTasks()
{
List<Tasks> tasks = new List<Tasks>();
tasks.Add(new Tasks {Status = "Pending", Queue = pending});
tasks.Add(new Tasks {Status = "Busy",Queue = busy});
tasks.Add(new Tasks {Status = "Completed", Queue = completed});
return tasks;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ICollectionView _tasksView = CollectionViewSource.GetDefaultView(MyTasks());
_tasksView.GroupDescriptions.Add(new PropertyGroupDescription("Status"));
lbxTasks.ItemsSource = _tasksView;
}
}
public class Tasks
{
public List<string> Queue { get; set; }
public string Status { get; set; }
}
}
This creates a listbox for each Queue (or List) that you provide and groups it by the name of the List.
The output:

SOURCE: Modified the example from the link below into this format.
LISTBOX grouping using collectionView Source