使用Xamarin形式的中继器视图中项目的索引



我有一个中继器视图,它的项源是视图模型的可观察集合,并且有一个数据模板。现在我想使用要在数据模板中使用的特定项的索引。有什么办法做到这一点吗?注:中继器视图是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}" />

最新更新