当前位置:  开发笔记 > 编程语言 > 正文

如何在ListView中显示行号?

如何解决《如何在ListView中显示行号?》经验,为你挑选了2个好方法。

显而易见的解决方案是在ModelView元素上使用行号属性,但缺点是在添加记录或更改排序顺序时必须重新生成这些属性.

优雅的解决方案吗?



1> amaca..:

我认为你优雅的解决方案,但这很有效.

XAML:


  
    
      
        
        
      
    
  

ValueConverter:

public class IndexConverter : IValueConverter
{
    public object Convert(object value, Type TargetType, object parameter, CultureInfo culture)
    {
        ListViewItem item = (ListViewItem) value;
        ListView listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
        int index = listView.ItemContainerGenerator.IndexFromContainer(item);
        return index.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


一点点补充:如果你想让索引开始容易改变(基于0,基于1,无论......):`int paramValue; if(Int32.TryParse(参数为string,out paramValue))index + = paramValue;`
好的解决方案 我唯一的问题是,当更改列表(例如添加或删除项目)时,行号不会更新,因此我最终会出现重复和缺失的数字.有任何想法吗?
然后在XAML中,您可以执行:`(...)Converter = {StaticResource IndexConverter},ConverterParamter = 1}`用于从1开始的编号.
删除行时不更新数字.

2> 小智..:

如果您有一个动态列表,其中添加,删除或移动项目,您仍然可以使用这个非常好的解决方案,只需在源列表中的更改完成后让列表视图的当前视图自行刷新.此代码示例直接在数据源列表"mySourceList"(在我的示例中为ObservableCollection)中删除当前项,最后将行号更新为正确的值.

ICollectionView cv = CollectionViewSource.GetDefaultView(listviewNames.ItemsSource);
if (listviewNames.Items.CurrentItem != null)
{
    mySourceList.RemoveAt(cv.CurrentPosition);
    cv.Refresh();
}

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有