Вы можете написать шаблон данных для KeyValuePair<string, List<string>>
и поместить его в шаблон ItemsTэлем корневого ListView. ItemsSource вашего ListView будет вашим словарем. В этом шаблоне данных у вас будет другой элемент управления (например, другой просмотр списка), в котором вы задаете шаблон элементов для текстового поля, которое привязывается к строке. В качестве альтернативы вы можете использовать один TreeView для всего в сочетании с иерархической таблицей данных. Вы можете сделать TreeView, как хотите, используя шаблоны.
<ListBox Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ContentPresenter Content="{Binding Key}" Margin="0 0 4 0"/>
<ItemsControl ItemsSource="{Binding Value}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Margin" Value="0 0 2 0" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
А в коде за некоторыми примерами данных:
var data = new Dictionary<string, List<string>>
{
{"1", new List<string> {"one", "two", "three", "four"}},
{"2", new List<string> {"five", "six", "seven", "eight"}}
};
this.listBox.ItemsSource = data;