a

Câu hỏi WPF Databinding stackpanel


Im người mới bắt đầu trong lập trình WPF, đến từ .NET 2.0 C #.

Im cố gắng để làm cho một ngang StackPanel cần điền dữ liệu từ một bảng trong cơ sở dữ liệu. Vấn đề là tôi muốn nó hiển thị một hình ảnh với một số văn bản từ bảng dưới đây và sau đó ngăn xếp hai mục theo chiều ngang.

Dưới đây là một số mã giả để hiển thị những gì tôi muốn làm:

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

Tôi chỉ đơn giản là không thể tìm ra cách để làm điều này.


17
2017-10-06 13:06


gốc




Các câu trả lời:


Câu trả lời của Julien là đúng cho mô tả bằng văn bản của bạn, tuy nhiên, nhìn vào XAML của bạn, nó xuất hiện bạn đang tìm kiếm một cái gì đó như sau:

<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>

Bạn chắc chắn cần một ItemsControl (hoặc một số nguồn gốc của) để ràng buộc nguồn của bạn. Sau đó, bạn có thể thay đổi hướng bằng cách thiết lập bảng điều khiển mục (mà tôi tin là một VirtualizingStackPanel với hướng dọc theo mặc định) vì vậy chỉ cần đặt nó thành một VirtualizingStackPanel với Hướng ngang. Sau đó, bạn có thể đặt ItemsTemplate cho từng mục của bạn vào bố cục mà bạn mong muốn (một hình ảnh xếp chồng lên nhau trên đầu văn bản bị ràng buộc từ cơ sở dữ liệu của bạn).


30
2017-10-06 14:18



Nhờ cả hai bạn, ví dụ của bạn chính xác là những gì tôi cần!
Đây sẽ là bài học đầu tiên của mỗi cuốn sách / hướng dẫn XAML từng được viết. - srock


Về cơ bản, bạn muốn sử dụng một điều khiển có khả năng hiển thị một liệt kê các đối tượng. Kiểm soát có khả năng của điều này là lớp ItemsControl và tất cả các hậu duệ của nó (Selector, ListBox, ListView, v.v.)

Liên kết ItemsSource tài sản của điều khiển này vào danh sách các đối tượng bạn muốn, dưới đây là danh sách người dùng bạn đã tìm nạp từ cơ sở dữ liệu. Đặt ItemTemplate kiểm soát một DataTemplate sẽ được sử dụng để hiển thị từng mục trong danh sách.

Mã mẫu:

Trong một Resources phần (ví dụ Window.Resources):

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

Trong của bạn Window/Page/UserControl:

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

Trong mã của bạn đằng sau:

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

23
2017-10-06 13:20