动态创建行和列

时间:2012-04-17 00:39:42

标签: c# wpf

对不起,如果这是一个菜鸟问题。我刚开始学习WPF,所以希望你们不要介意。但是,是否可以通过xaml动态地为每一行创建两列,或者这必须在后端代码(viewmodel,.cs)中完成?现在我通过绑定数据源只有很长的项目列表。例如,datasource =“{binding path = House.Item}”... Item是一个集合,它在执行存储过程调用时存储标签和值。例如:label =“Color”,value =“White”。

我目前有:

  

颜色< - 标签

     

白色< - 文本块中的值

     

Window< - label

     

乙烯基< - 文本块中的值...等等

我希望每行的结果为2列(无法正确显示):

  

颜色| >>>窗口

     

白色| >>>套裹

     

门| >>>地下室

     

伍德| >>>完成

我想要实现这一点的原因是我可以消除水平滚动,以防物品变得非常长。任何意见将是有益的。非常感谢先进。

更新

<ListBox.Resources>                                 
<DataTemplate DataType="{x:Type Models:HouseDetail}" >                                               
<Views:HouseView>           
</DataTemplate>
<ListBox.Resources>

这几乎是我的数据生成方式,它再次给我一个像“从上到下”的流程,而我希望它显示“从左到右”。 例如:1 2 3&lt; - (我想要的) 而不是

1

2

3

2 个答案:

答案 0 :(得分:1)

如果要显示列表,则应查看Listbox控件。对于列表中的每个项目,您可以使用ItemTemplate描述您希望如何布置项目。有关使用ItemTemplates的更多信息,请参阅ItemTemplate documentation

有一个对象代表您的列表项(例如House类)。创建列表项的ObservableCollection并将Listbox绑定到ObservableCollection。然后,在XAML中,描述每个House项目的布局以及您希望它的外观。这样的事情应该有效:

代码

public class House 
{
     public string Color { get; set; }
     public string Material { get;set; }
     public string Window { get; set; }
}


public class ViewModel
{
    public ObservableCollection<House> Houses { get; set; }
}

XAML:

  <!-- DataContext should be set to an instance of ViewModel -->
 <ListBox ItemsSource="{Binding Houses}">
     <ListBox.ItemTemplate>
         <DataTemplate>
             <StackPanel>
                 <!-- I am just using StackPanels here, but you can use any layout control you want to describe how you want each list item to look --> 
                 <StackPanel Orientation=Horizontal>
                     <TextBlock Text="House Color:"/>
                     <TextBlock Text="{Binding Path=Color}"/>
                 </StackPanel>
                 <StackPanel Orientation=Horizontal>
                     <TextBlock Text="House Material:"/>
                     <TextBlock Text="{Binding Path=Material}"/>
                 </StackPanel>
                 <!-- Add more controls to show more information -->
             </StackPanel>
         </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>

抱歉,我没有编译器方便,所以我不确定这是否会编译,但它应该关闭。

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题,但我认为堆叠面板可能正是您所寻找的。

在控件的每一行中,您都可以拥有一个包含2个文本块的堆栈面板。然后,您可以将每个值直接绑定到文本块。