我有一个中继器视图,它的项源是视图模型的可观察集合,并且有一个数据模板。现在我想使用要在数据模板中使用的特定项的索引。有什么办法做到这一点吗?注:中继器视图是UXDivers.Atina库的一部分,但它应该公开与列表视图相同的API,因此适用于列表视图的解决方案可能也适用于中继器。
这是我迄今为止的代码:
Xaml:
<ctlRep:Repeater
ItemsSource="{ Binding ListItems }"
Padding="10, 10"
Spacing="10"
Orientation="Vertical">
<ctlRep:Repeater.ItemTemplate>
<DataTemplate>
<elements:StructuredVideoDescriptionItemTemplate />
</DataTemplate>
</ctlRep:Repeater.ItemTemplate>
</ctlRep:Repeater>
视图模型:
public class VideoDescriptionStructureListItem : ObservableObject
{
public string Title { get; set; }
public bool IsNumberic { get; set; }
public ObservableCollection<string> ListItems { get; set; }
}
在数据模板中,我希望能够访问ListItems项(它是一个字符串(和特定项的索引。
这可能不是您想要的解决方案,但我最近通过以下策略解决了确切的问题
- 引入一个包含索引属性的中间对象
- 构建这些对象的
ObservableCollection
而不是string
对象,并分配正确的索引 - 绑定到字符串和索引,而不是直接对象
类可能如下所示:
class VideoDescriptionViewModel
{
public string Description { get; private set; }
public int Index { get; private set; }
public VideoDescriptionViewModel(string description, int index)
{
Description = description;
Index = index;
}
}
你可以构建像这样的实例
var videoDescriptionViewModels = videoDescriptions.Select((description, index) => new VideoDescriptionViewModel(description, index));
并将其从XAML 中绑定
<elements:StructuredVideoDescriptionItemTemplate Description="{Binding Description}"
Id="{Binding Id}" />