Dicionário de ligação <string, List <customObject>> para ListBox no WPF
eu tenho umDictionary<string, List<WritingMachine>>
em que a chave é o nome do host de uma máquina que grava em um servidor e o valor é uma lista de objetos WritingMachine (mostrados abaixo):
public class WritingMachine
{
public string HostName { get; set; }
public string Program { get; set; }
public string Login { get; set; }
public string Server { get; set; }
}
Estou tentando vincular o dicionário a um WPF ListBox; exibindo o nome do host (chave do dicionário) e um resumo doWritingMachine
lista associada a essa chave.
Estou tendo problemas para acessar as propriedades do indivíduoWritingMachine
elementos dentro da lista.
Aqui está o meu XAML até agora:
<ListBox x:Name="MachineListBox" Margin="10" Grid.Column="0" FontFamily="Consolas" ItemsSource="{Binding Path=MachineDictionary}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Margin="5">
<ContentPresenter Content="{Binding Key}" Margin="0,0,4,0"/>
<ItemsControl ItemsSource="{Binding Value}" Margin="10,0,0,0">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Isso resulta em uma caixa de listagem que se parece com isso:
Obviamente, isso está errado porque oWritingMachine
elementos da lista estão retornando o padrãoToString
. SubstituindoWritingMachine
éToString
Posso obter o efeito que desejo (mais ou menos):
Mas essa é uma maneira péssima de fazer isso ... Quero poder acessar as propriedades individuais dos elementos e organizá-las em controles no meuListBox.ItemTemplate
usandoContent="{Binding Value.Server}"
ou similar.
Alguma ideia?