0

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

我目前有:

颜色 <-- 标签

白色 < -- 文本块中的值

窗口 <-- 标签

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

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

颜色 | >>> 窗口

白色 | >>> 文利

门 | >>> 地下室

木材 | >>> 完成

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

更新:

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

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

1

2

3

4

2 回答 2

1

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

有一个代表您的列表项的对象(例如 House 类)。创建列表项的 ObservableCollection 并将列表框绑定到 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>

抱歉,我手边没有编译器,所以我不确定这是否会编译,但它应该很接近。

于 2012-04-17T02:58:19.043 回答
0

我不确定我是否正确理解了这个问题,但我认为 stackpanel 可能是您正在寻找的。

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

于 2012-04-17T01:48:16.663 回答