2010-07-14 36 views
5

Khá mới đối với WPF ...có một bảng dữ liệu cho các phần tử khung lưới trong WPF không?

Tôi có một tập hợp dữ liệu tôi muốn liên kết với bảng điều khiển lưới. Mỗi đối tượng chứa hàng và cột lưới của nó, cũng như các công cụ để điền vào vị trí lưới. Tôi thực sự thích cách tôi có thể tạo các mẫu dữ liệu trong hộp danh sách XAML để tạo ra một giao diện người dùng với hầu như không có gì trong mã phía sau cho nó. Có cách nào để tạo mẫu dữ liệu cho các phần tử bảng điều khiển lưới và gắn bảng điều khiển vào bộ sưu tập dữ liệu không?

Trả lời

13

Bạn có thể sử dụng ItemsControl bằng một bảng điều khiển Grid. Đây là một ví dụ. XAML:

<ItemsControl x:Name="myItems"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition /> 
         <RowDefinition /> 
         <RowDefinition /> 
        </Grid.RowDefinitions> 
       </Grid> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding MyText}" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Style.Setters> 
        <Setter Property="Grid.Row" Value="{Binding MyRow}" /> 
        <Setter Property="Grid.Column" Value="{Binding MyColumn}" /> 
       </Style.Setters> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 
    </ItemsControl> 

codebehind (cho mục đích thử nghiệm):

public Window1() 
    { 
     InitializeComponent(); 
     myItems.ItemsSource = new[] { 
      new {MyRow = 0, MyColumn = 0, MyText="top left"}, 
      new {MyRow = 1, MyColumn = 1, MyText="middle"}, 
      new {MyRow = 2, MyColumn = 2, MyText="bottom right"} 
     }; 
    } 
+4

Tính năng này hoạt động tốt nếu bạn có một số hàng được hiển thị, nhưng nó không cho phép bạn hiển thị số hàng tùy ý dựa trên số lượng dữ liệu của bạn. – LJNielsenDk

+1

Tôi đã cố gắng thiết lập hàng và cột từ DataTemplate (trên phần tử gốc trong mẫu) và tự hỏi tại sao nó không hoạt động. Điều này đã giúp rất nhiều. Cảm ơn! – qJake

0

Không chắc chắn nếu điều này sẽ giúp bạn, nhưng tại sao bạn không thử thiết lập ItemsPanel của một ItemsControl (ListBox, ListView) để một UniformGrid. Một cái gì đó như thế này:

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

Nó tương tự như giải pháp trước đó, chỉ năng động hơn một chút.

Các vấn đề liên quan