1

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

            <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>
4

3 回答 3

2

您可以将 设置AlternationCountListView大于可以返回的可能行数的值。然后,绑定到ListView.AlternationIndex以获取当前项目的从零开始的索引。

于 2013-03-07T23:12:03.203 回答
1

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

但我可以看到一种让它工作的技巧。

您将 ( OneTime)绑定Counter到您的 ViewModel 中的一个属性,并且在该属性的访问器中,除了返回它之外get,您还可以迭代。counter

这样,每个ListView项目都会有一个适当的索引。

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

于 2013-03-07T22:21:02.420 回答
0

这是一篇很老的帖子,我看到很多人问我们如何使用 AlternationCount 和 AlternationIndex 来避免从零开始的索引。因此,对于像我这样的其他用户正在寻找解决方案。你可以用一些不寻常(或者你可以说很奇怪)的解决方法来做到这一点,但它对我有用:

隐藏第一项行(状态为 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>
于 2020-10-02T14:07:19.940 回答