【问题标题】:WPF & ListView - Adding Columns and Items @ RuntimeWPF & ListView - 在运行时添加列和项目
【发布时间】:2011-04-08 23:13:00
【问题描述】:

请原谅我的菜鸟。

我是从 Windows 窗体转过来的,所以我可以使用很棒的 Fluent Ribbon Control Suite。我正在为某人重做一个应用程序。

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

但我很难弄清楚这一点。我只是不明白。在上网之前,我做的第一件事是(思考并希望它与 Windows 窗体的做法非常相似):

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

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

我见过的唯一解决方案涉及很多 XAML,但我不明白它是如何工作的,因为我无法在运行时更改 XAML?

【问题讨论】:

    标签: c# .net wpf listview listviewitem


    【解决方案1】:
    <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);
    

    【讨论】:

    • 非常感谢您!使用:ItemsSource = ItemsSourceObject,我是否只需将查询返回的结果数组传递给 ItemSourceObject?
    • ItemsSource GridView (ItemsControl) 的属性是 IEnumerable。因此,将其设置为查询返回的结果数组即可。如果你有Result[] QueryResultItemsSource = QueryResult 就可以了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2010-11-01
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多