gpt4 book ai didi

c# - 获取项目内 ObservableCollection 中项目的索引

转载 作者:太空狗 更新时间:2023-10-29 22:36:45 24 4
gpt4 key购买 nike

我希望能够显示 DataTemplate 中的索引值,但我不希望数据由模型或 View 模型保留或支持。换句话说,如果 OC 中项目的顺序发生变化,我不想重新计算索引。该值应在本质上与 OC 中的基础指数相关联。如果索引从 0 开始就没问题(事实上,我希望如此)。

其他人使用的一种方法是 AlternationIndex美联社,但是这个has its own pitfalls对于某些情况。

最后一个想法:我忍不住认为转换器将对最终解决方案有所帮助。

最佳答案

我会使用一个转换器来做到这一点。

诀窍是在 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 更加困惑。因为您无法绑定(bind) ConverterParameter,所以我将其设置为 绑定(bind)到集合的静态资源:

<CollectionViewSource x:Key="collectionSource" Source="{Binding Path=MyCollection}" />

...

<TextBlock Text="{Binding Converter={StaticResource ResourceKey=ItemToIndexConverter},
ConverterParameter={StaticResource ResourceKey=collectionSource}}"/>

关于c# - 获取项目内 ObservableCollection 中项目的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com