繁体   English   中英

动态创建行和列

[英]Dynamically create rows and columns

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

我目前有:

颜色<-标签

白色<-文本块中的值

窗口<-标签

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

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

颜色| >>>窗口

白| >>> Vinly

门| >>>地下室

木| >>>完成

我想要实现此目的的原因是,这样我就可以消除水平滚动,以防万一项目真的很长。 任何意见将是有益的。 非常感谢您。

更新:

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

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

1个

2

3

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

有一个代表您的列表项的对象(例如,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>

抱歉,我没有编译器,所以我不确定是否可以编译,但是应该很接近。

我不确定我是否正确理解了该问题,但我认为您可能正在寻找Stackpanel。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM