对不起,如果这是一个菜鸟问题。我刚开始学习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
答案 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)
我不确定我是否正确理解了这个问题,但我认为堆叠面板可能正是您所寻找的。 p>
在控件的每一行中,您都可以拥有一个包含2个文本块的堆栈面板。然后,您可以将每个值直接绑定到文本块。