显而易见的解决方案是在ModelView元素上使用行号属性,但缺点是在添加记录或更改排序顺序时必须重新生成这些属性.
有优雅的解决方案吗?
我认为你有优雅的解决方案,但这很有效.
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(); } }
如果您有一个动态列表,其中添加,删除或移动项目,您仍然可以使用这个非常好的解决方案,只需在源列表中的更改完成后让列表视图的当前视图自行刷新.此代码示例直接在数据源列表"mySourceList"(在我的示例中为ObservableCollection)中删除当前项,最后将行号更新为正确的值.
ICollectionView cv = CollectionViewSource.GetDefaultView(listviewNames.ItemsSource); if (listviewNames.Items.CurrentItem != null) { mySourceList.RemoveAt(cv.CurrentPosition); cv.Refresh(); }