Подтвердить что ты не робот

Панель стека 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>

Я просто не могу понять, как это сделать.

4b9b3361

Ответ 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