如何在Xamarin.iOS和MVVMCross中的UICollectionView中添加Section头。 我只想问最好的方法。我在2天内搜索但无法找到任何简单的方法。我的数据是List和Section Contain List
我的设计看起来像
答案 0 :(得分:1)
要在UICollectionView中添加补充视图,您需要覆盖CollectionViewSource以提供它们。
MvvmCross中的基本代码位于https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewSource.cs和https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxBaseCollectionViewSource.cs
CollectionViews的一个好的Xamarin教程是http://developer.xamarin.com/guides/ios/user_interface/introduction_to_collection_views/
如果你想使补充视图可绑定,那么你可以通过以与细胞类似的方式调整补充视图来做到这些 - 例如从https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewCell.cs复制并粘贴BindingContext
`DataContext`代码,然后确保在集合视图源中使用或重用补充单元格时设置DataContext。
有一个未解决的问题是在MvvmCross或样本中要求此功能 - https://github.com/MvvmCross/MvvmCross/issues/339 - 但是没有人(除了我!)曾经评论过它...很高兴看到它被添加。
答案 1 :(得分:0)
派对有点晚了,但在这里你有我的工作代码:
方便时更改数据:
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);
}
}