我有一个从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>
答案 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>