将具有固定值的列添加到ListView GridView

时间:2011-06-27 22:42:08

标签: wpf listview data-binding

我将ListView绑定到List(List(Of Integer))。 我可以这样指定列:

<ListView ItemsSource="{Binding ResultsByDenomination}">
<ListView.View>
    <GridView>
        <GridViewColumn Header="      "/>
        <GridViewColumn Header="Noord" DisplayMemberBinding="{Binding [0]}"/>
        <GridViewColumn Header="Oost" DisplayMemberBinding="{Binding [1]}"/>
        <GridViewColumn Header="Zuid" DisplayMemberBinding="{Binding [2]}"/>
        <GridViewColumn Header="West" DisplayMemberBinding="{Binding [3]}"/>
    </GridView>
</ListView.View>

这将ListOfList整齐地放在方格中。 但是,我想用固定值填充第一列。 除了将ListOfListOf Integer重建为ListOfList Of字符串并添加具有固定值的第一列之外,我该怎么做呢?

编辑:基本上我想添加RowHeaders。

1 个答案:

答案 0 :(得分:1)

如果行标题有一个数据结构,行数据有另一个数据结构,只需将数据转换为ListView通过组合它们即可轻松使用的新数据结构。由于您似乎喜欢“螺母和螺栓”数据结构,因此您可以使用List<Tuple<string, List<int>>>

这是一个简单的例子。首先是模拟ResultsByDenomination属性的代码隐藏:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    var rowHeaders = new List<string> { "One", "Two" };
    var rowData = new List<List<int>>
    {
        new List<int> { 1, 2, 3, 4 },
        new List<int> { 5, 6, 7, 8 },
    };
    var listViewData = rowHeaders.Zip(rowData, (a, b) => Tuple.Create(a, b)).ToList();
    DataContext = listViewData;
}

和修改后的XAML支持新的数据结构:

<ListView ItemsSource="{Binding}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Item1}"/>
            <GridViewColumn Header="Noord" DisplayMemberBinding="{Binding Item2[0]}"/>
            <GridViewColumn Header="Oost" DisplayMemberBinding="{Binding Item2[1]}"/>
            <GridViewColumn Header="Zuid" DisplayMemberBinding="{Binding Item2[2]}"/>
            <GridViewColumn Header="West" DisplayMemberBinding="{Binding Item2[3]}"/>
        </GridView>
    </ListView.View>
</ListView>

您还可以创建实用程序类,而不是使用具有更多描述性名称的Tuple