2011-04-08 106 views
2

请原谅我的不高兴。WPF&ListView - 在运行时添加列和项目

我从Windows窗体过来,所以我可以用流利的真棒丝带控制套件。我正在为某人重做一个应用程序。

基本上,我需要能够以编程方式创建新Column S和在运行时从数据库查询项目进行填充。根据点击哪个按钮,我还需要清除ListView中的所有项目,并使用不同的列名称以及来自另一个数据库查询的新项目重新填充它。

但我有一个很难试图弄清楚这一点。我只是不明白。我做的第一件事,网上通缉之前,是这样的(想法,希望这将是非常类似于Windows窗体是怎么做的):

GridViewColumn gvc = new GridViewColumn(); 
      gvc.Header = "hi baeltazor!"; 
      listView1.Items.Add(gvc); 

可是,我错了。我试图做的是创建一个名为“嗨baeltazor!”的专栏。并将其添加到ListView。我们如何在运行时用项目和列填充ListView?

我见过的唯一的解决办法有很多的XAML参与,我没有得到如何工作的,因为我不能在运行时更改XAML?

回答

4
<ListView x:Name="ListViewControl"> 
    <ListView.View> 
     <GridView x:Name="GridViewControl"/> 
    </ListView.View> 
</ListView> 

,并在后面的代码,

ListViewControl.ItemsSource = ItemsSourceObject; //your query result 
GridViewColumn column = new GridViewColumn(); 
column.Header = "Name"; 
column.DisplayMemberBinding = new Binding("Name"); 
GridViewControl.Columns.Add(column); 
+0

感谢您给我们一个很有型!与:'ItemsSource = ItemsSourceObject',我只是将从查询返回的结果数组传递给ItemSourceObject? – 2011-04-08 23:57:09

+1

''GridView'(ItemsControl')的ItemsSource属性是'IEnumerable'。因此,将其设置为从查询返回的结果数组将会执行。如果你有'Result [] QueryResult','ItemsSource = QueryResult'就可以。 – krishnaaditya 2011-04-09 00:15:44

3

一个建议...考虑使用DataGrid控件(你的要求似乎APT) 它可以自动生成的项目源列。 如果你真的想在自己创建的列...你可以做到这一点,通过使用4种类型的DataGridColumn S的可能并不需要CellTemplate进行设置(这是很容易从代码实现之后)。当然也可以在其中指定CellTemplate