Панель стека WPF для привязки данных
Я начинаю программировать WPF, исходя из .NET 2.0 С#.
Я пытаюсь сделать горизонтальный StackPanel
, который должен быть заполнен данными из таблицы в базе данных. Проблема в том, что я хочу, чтобы он отображал изображение с некоторым текстом из таблицы ниже, а затем складывал эти два элемента по горизонтали.
Здесь некоторый псевдокод для отображения того, что я хочу сделать:
<StackPanel Orientation="horizontal" ItemsSource="{Binding Path=myTable}">
<StackPanel>
<Image Source="User.png"/>
<Label HorizontalAlignment="Center" Content="{Binding Path=UserName}"></Label>
</StackPanel>
</StackPanel>
Я просто не могу понять, как это сделать.
Ответы
Ответ 1
Ответ Julien верен для вашего письменного описания, однако, глядя на ваш XAML, похоже, вы ищете что-то вроде следующего:
<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>
Вам определенно нужен элемент ItemsControl (или некоторый вывод) для привязки вашего источника. Затем вы можете изменить ориентацию, установив панель элементов (по моему мнению, это VirtualizingStackPanel с вертикальной ориентацией по умолчанию), поэтому просто установите ее в VirtualizingStackPanel с горизонтальной ориентацией. Затем вы можете установить ItemsTemplate для каждого из ваших элементов в желаемый макет (изображение сложено поверх текста, связанного с вашей базой данных).
Ответ 2
В принципе, вы хотите использовать элемент управления, способный отображать перечисление объектов. Управлением, способным к этому, является класс ItemsControl
и все его потомки (Selector
, ListBox
, ListView
и т.д.).
Привяжите свойство ItemsSource
этого элемента управления к списку объектов, которые вы хотите, вот список пользователей, которые вы извлекли из базы данных. Установите ItemTemplate
элемента управления на DataTemplate
, который будет использоваться для отображения каждого элемента в списке.
Пример кода:
В разделе Resources
(например, Window.Resources
):
<DataTemplate x:Key="UserDataTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="User.png"/>
<Label HorizontalAlignment="Center" Content="{Binding Path=UserName}" />
</StackPanel>
</DataTemplate>
В Window
/Page
/UserControl
:
<ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" />
В вашем коде позади:
UserList.ItemsSource = ... // here, an enumeration of your Users, fetched from your db