Enlace de diccionario <string, List <customObject>> a ListBox en WPF
tengo unDictionary<string, List<WritingMachine>>
donde la clave es el nombre de host de una máquina que escribe en un servidor, y el valor es una lista de objetos WritingMachine (que se muestra a continuación):
public class WritingMachine
{
public string HostName { get; set; }
public string Program { get; set; }
public string Login { get; set; }
public string Server { get; set; }
}
Estoy tratando de vincular el diccionario a un WPF ListBox; mostrando el nombre de host (la clave del diccionario) y un resumen deWritingMachine
lista que está asociada con esa clave.
Tengo problemas para acceder a las propiedades del individuo.WritingMachine
elementos dentro de la lista.
Aquí está mi XAML hasta ahora:
<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>
Esto da como resultado un cuadro de lista que se ve así:
Obviamente esto está mal porque elWritingMachine
los elementos de la lista solo devuelven el valor predeterminadoToString
. Al anularWritingMachine
'sToString
Puedo obtener el efecto que quiero (más o menos):
Pero esta es una manera horrible de hacerlo ... Quiero poder acceder a las propiedades de los elementos individuales y organizarlas en controles en miListBox.ItemTemplate
utilizandoContent="{Binding Value.Server}"
o similar.
¿Algunas ideas?