2013-03-07 98 views
1

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

  <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> 
+1

你见过这个:[链接](http://stackoverflow.com/questions/660528/how-to-display-row-numbers-in-a-listview) – 2013-03-07 23:15:07

回答

1

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

但是我可以看到有种破解让它起作用。

您绑定(OneTime)针对从您的ViewModel一个Counter财产,并在get访问这个属性的,你除了它返回迭代counter

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

但是要小心使用该解决方案,之后您将无法追溯索引。如果你也需要这样做,你应该在你的对象中创建一个IdInTable字段,并在你的ViewModel中正确填充它。

+0

林新的WPF,但现在它只是一个简单的文本框,按钮和listview来获取数据!我在做什么是使用linq to sql来执行存储过程。文本框用于输入参数。研究你的建议! – KeyboardFriendly 2013-03-07 22:39:45

+1

然后可能最干净的方法是以某种方式让你的sql请求返回一个'RowId'字段(或者你之后生成它),然后你只需绑定到'ListView'中的那个字段。 ++的解决方案有点不好,不太好。 – Mic 2013-03-07 22:42:14

+0

我可以尝试添加Rownum!它会工作,但不优雅! – KeyboardFriendly 2013-03-07 22:50:58

2

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

+0

任何方式从1开始获取索引号? – Raven 2017-11-15 21:51:23

+0

@Raven您可以实现一个'IValueConverter'来将基于零的索引转换为增加1的值。但是,请注意虚拟化发生时'AlternationIndex'方法的局限性:https://stackoverflow.com/questions/ 6511180/WPF的ItemsControl的最电流列表项的索引 - 内式的ItemsSource/17962582#17962582 – 2017-11-16 21:19:02