Использование индекса элемента в представлении повторителя в формах Xamarin - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть представление повторителя, источником которого является наблюдаемая коллекция моделей представлений, а также шаблон данных. Теперь я хочу использовать индекс конкретного элемента, который будет использоваться внутри шаблона данных. Есть ли способ добиться этого? ПРИМЕЧАНИЕ. Представление повторителя является частью библиотеки 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>

ViewModel:

public class VideoDescriptionStructureListItem : ObservableObject
{
    public string Title { get; set; }
    public bool IsNumberic { get; set; }
    public ObservableCollection<string> ListItems { get; set; }
}

Внутри шаблона данных я хотел бы иметь доступ к элементу ListItems (который является строкой) и индексу конкретного элемента.

1 Ответ

0 голосов
/ 02 ноября 2018

Возможно, это не то решение, которое вы ищете, но я недавно решил точную проблему с помощью следующей стратегии

  • Введите промежуточный объект, который содержит свойство для индекса
  • Создайте 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}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...