Как добавить заголовки разделов в UICollectionView в Xamarin.iOS и MVVMCross. Я просто хочу спросить, как лучше всего подходить. Я ищу 2 дня, но не могу найти простого подхода. Мои данные - это список, а раздел содержит список

Мой дизайн выглядит как

enter image description here

1
Waqas Idrees 4 Мар 2015 в 13:56

2 ответа

Лучший ответ

Чтобы добавить дополнительные представления в UICollectionView, вам необходимо переопределить CollectionViewSource, чтобы предоставить их.

Базовый код для этого в MvvmCross находится в https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewSource.cs и https://github.com/MvvmCross/MvvmCross/Cirrious/Bribrious/ .MvvmCross.Binding.Touch / Views / MvxBaseCollectionViewSource.cs

Хорошее руководство по Xamarin для CollectionViews - это http://developer.xamarin.com/guides/ios. / user_interface / Introduction_to_collection_views /

Если вы хотите сделать дополнительное представление связываемым, вы можете сделать это, адаптировав дополнительные представления аналогично ячейкам, например копирование и вставка кода BindingContext `DataContext` из https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewCell.cs, а затем убедитесь, что вы установили DataContext, когда дополнительная ячейка используется или повторно используется в источнике представления коллекции.

Существует нерешенная проблема с запросом этой функции в MvvmCross или образце - https://github.com/MvvmCross / MvvmCross / issues / 339 - но никто (кроме меня!) Никогда не комментировал это ... был бы счастлив, если бы он был добавлен.

1
Stuart 5 Мар 2015 в 11:29

Немного поздно для вечеринки, но вот мой рабочий код для:

  1. Использование нескольких разделов в коллекции
  2. Используйте заголовок для каждого раздела

Измените данные по своему усмотрению:

public class SearchCollectionViewSource : MvxCollectionViewSource
{
    private List<SearchResult> results { get { return ItemsSource as List<SearchResult>; } }

    public SearchCollectionViewSource (UICollectionView collectionView) : base(collectionView) { }

    public SearchCollectionViewSource (UICollectionView collectionView, NSString defaultCellIdentifier) : base(collectionView, defaultCellIdentifier) { }

    public override UICollectionReusableView GetViewForSupplementaryElement (UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
    {
        return (HeaderView)collectionView.DequeueReusableSupplementaryView(elementKind, HeaderView.Key, indexPath);
    }

    public override nint NumberOfSections (UICollectionView collectionView)
    {
        return results.Count;
    }
    public override nint GetItemsCount (UICollectionView collectionView, nint section)
    {
        return results[(int)section].photos.Count;
    }

    protected override object GetItemAt(NSIndexPath indexPath)
    {
        return results [indexPath.Section].photos [indexPath.Row];
    }
}

public sealed class HeaderView : UICollectionReusableView
{
    public static string Key = "HeaderId";

    [Export("initWithFrame:")]
    public HeaderView(System.Drawing.RectangleF frame)
        : base(frame)
    {
        UIView separator = new UIView() { Frame = new System.Drawing.RectangleF(0, 0, (float)UIScreen.MainScreen.Bounds.Width, 10), BackgroundColor = UIColor.LightGray };
        AddSubview(separator);
    }
}
0
Alex R. R. 7 Июн 2016 в 14:01