获取项目内ObservableCollection中项目的索引
本文关键字:项目 索引 ObservableCollection 获取 | 更新日期: 2023-09-27 18:02:57
我希望能够在DataTemplate中显示索引值,但是我不希望数据被模型或视图模型持久化或支持。换句话说,如果条目在OC中的顺序发生了变化,我不想重新计算索引。该值应该在本质上与OC中的基础索引相关联。如果索引是以0为基础的(事实上,我希望是这样),这是可以的。
其他人使用的一种方法是AlternationIndex AP,但是在某些情况下它有自己的缺陷。
最后一个想法:我忍不住认为转换器将在最终解决方案中有所帮助。
我将使用转换器来完成此操作。
诀窍是给它一个源集合,要么在ConverterParameter
上,要么在依赖属性上。此时,转换就像使用IndexOf
一样简单。
下面是一个示例转换器:
public class ItemToIndexConverter : IValueConverter
{
public object Convert(...)
{
CollectionViewSource itemSource = parameter as CollectionViewSource;
IEnumerable<object> items = itemSource.Source as IEnumerable<object>;
return items.IndexOf(value as object);
}
public object ConvertBack(...)
{
return Binding.DoNothing;
}
}
可以实现强类型,返回格式化字符串作为数字等。基本模式将如上所述。
这个实现使用参数方法,因为在我看来制作DP更混乱。因为你不能绑定ConverterParameter
,我把它设置为一个静态资源,是绑定到集合:
<CollectionViewSource x:Key="collectionSource" Source="{Binding Path=MyCollection}" />
...
<TextBlock Text="{Binding Converter={StaticResource ResourceKey=ItemToIndexConverter},
ConverterParameter={StaticResource ResourceKey=collectionSource}}"/>