在Xamarin表单的中继器视图中使用项目的索引

时间:2018-11-02 11:45:17

标签: c# xaml xamarin.forms

我有一个转发器视图,该视图的项源是可观察到的视图模型集合,并且具有数据模板。现在,我想使用要在数据模板中使用的特定项目的索引。有什么办法可以做到这一点? 注意:转发器视图是UXDivers.Artina库的一部分,但它应公开与列表视图相同的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项目(它是一个字符串)和特定项目的索引。

1 个答案:

答案 0 :(得分:2)

这可能不是您要寻找的解决方案,但是我最近通过以下策略解决了确切的问题

  • 介绍一个包含索引属性的中间对象
  • 构建一个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}" />