在Wpf Listview中显示行号

时间:2013-03-07 22:14:24

标签: c# wpf listview

我有一个从sql server数据库创建的listview,你如何包含行号?

            <ListView x:Name="lstName" Height="400" Canvas.Top="55" Width="450">
                <ListView.View>
                    <GridView>                     
                        <GridViewColumn Header="Number" Width="auto" 
                         DisplayMemberBinding="{Binding Path=Id}" />
                        <GridViewColumn Header="FirstName" Width="auto" 
                         DisplayMemberBinding="{Binding Path=FName}" />
                        <GridViewColumn Header="LastName" Width="auto" 
                         DisplayMemberBinding="{Binding Path=LName}" />
                        <GridViewColumn Header="StreetAddress" Width="auto" 
                         DisplayMemberBinding="{Binding Path=Street}" />
                        <GridViewColumn Header="City" Width="auto" 
                         DisplayMemberBinding="{Binding Path=City}" />
                        <GridViewColumn Header="State" Width="auto"
                         DisplayMemberBinding="{Binding Path=State}" />                       
                    </GridView>                        
                </ListView.View>
            </ListView>

3 个答案:

答案 0 :(得分:2)

您可以将AlternationCount的{​​{1}}设置为大于可以返回的行数的值。然后,绑定到ListView以获取当前项的从零开始的索引。

答案 1 :(得分:1)

我没有看到一种简单的方法,因为WPF的理念是绑定到数据,然后视图应该是独立的。

但我可以看到一种破解方法让它发挥作用。

绑定(OneTime)来自ViewModel的Counter属性,并且在此属性的get访问器中,除了返回counter之外,还要迭代ListView

这样,每个IdInTable项都有一个合适的索引。

但要小心该解决方案,之后您将无法追溯到项目的索引。如果您出于某种原因需要也这样做,您实际上应该在对象中创建一个{{1}}字段并在ViewModel中正确填充它。

答案 2 :(得分:0)

这是一篇非常古老的文章,我已经看到很多人问我们如何避免使用AlternateCount和AlternateIndex从零开始的索引。因此,对于像我这样的其他用户,寻找解决方案。您可以使用一些不寻常的解决方法(也可以说很怪异)来解决此问题,但对我有用:

隐藏第一行(状态为Model.Status):

<ListView.ItemContainerStyle>
  <Style TargetType="ListViewItem">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Status}" Value="Status">
        <Setter Property="Visibility" Value="Collapsed" />
      </DataTrigger>
     </Style.Triggers>
 </Style>
 </ListView.ItemContainerStyle>

之后,在第一行添加一个虚拟记录:

FileDetail fd = new FileDetail()
{
  FileName = "File Name",
  Count = "Count",
  Status = "Status",
  FilePath = "File Path"
};
FileList.Add(fd);

在整个代码中相应地管理迭代。

您可以使用该0行做另外一件事。您可以隐藏原始标题并将该0行作为标题。

<ListView.Resources>
  <Style TargetType="{x:Type GridViewColumnHeader}">
   <Setter Property="Visibility" Value="Collapsed" />
  </Style>
 </ListView.Resources>