c# wpf data-binding stackpanel

treeview xaml c#



WPF Databinding stackpanel (2)

Soy un principiante en la programación WPF, procedente de .NET 2.0 C #.

Estoy tratando de hacer un StackPanel horizontal que se debe llenar con datos de una tabla en una base de datos. El problema es que quiero que muestre una imagen con algo de texto de la tabla a continuación y luego apile esos dos elementos horizontalmente.

Aquí hay algunos pseudocódigos para mostrar lo que quiero hacer:

<StackPanel Orientation="horizontal" ItemsSource="{Binding Path=myTable}"> <StackPanel> <Image Source="User.png"/> <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}"></Label> </StackPanel> </StackPanel>

Simplemente no puedo averiguar cómo hacer esto.


Básicamente, desea utilizar un control capaz de mostrar una enumeración de objetos. El control capaz de esto es la clase ItemsControl y todos sus descendientes ( Selector , ListBox , ListView , etc.).

Enlace la propiedad ItemsSource de este control a la lista de objetos que desee, aquí una lista de los usuarios que ha obtenido de la base de datos. Establezca el ItemTemplate del control en un DataTemplate que se usará para mostrar cada elemento en la lista.

Código de muestra:

En una sección de Resources (por ejemplo, Window.Resources ):

<DataTemplate x:Key="UserDataTemplate"> <StackPanel Orientation="Horizontal"> <Image Source="User.png"/> <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}" /> </StackPanel> </DataTemplate>

En su Window / Page / UserControl :

<ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" />

En su código detrás:

UserList.ItemsSource = ... // here, an enumeration of your Users, fetched from your db


La respuesta de Julien es correcta para su descripción escrita, sin embargo, al mirar su XAML, parece que está buscando algo como lo siguiente:

<DataTemplate x:Key="UserDataTemplate"> <StackPanel> <Image Source="User.png"/> <Label HorizontalAlignment="Center" Content="{Binding Path=UserName}" /> </StackPanel> </DataTemplate> <ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" > <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>

Definitivamente necesitas un ItemsControl (o alguna derivación de) para enlazar tu fuente. Luego puede cambiar la orientación configurando su panel de elementos (que creo que es un VirtualizingStackPanel con orientación vertical por defecto), así que configúrelo en un VirtualizingStackPanel con orientación horizontal. Luego, puede establecer la plantilla de elementos para cada uno de sus elementos al diseño que desee (una imagen apilada sobre el texto enlazado desde su base de datos).