UICollectionView 帮助 在 MVVMCross Xamarin 中添加部分的最佳方式是什么?
UICollectionView Help What is the Best Way for adding section in MVVMCross Xamarin?
如何在 Xamarin.iOS 和 MVVMCross 中的 UICollectionView 中添加 Section headers。
我只想问最好的方法。我从 2 天开始搜索,但找不到任何简单的方法。我的数据是 List and Section Contain List
我的设计看起来像
要在 UICollectionView 中添加补充视图,您需要覆盖 CollectionViewSource 以提供它们。
MvvmCross 中的基本代码在 https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewSource.cs and https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxBaseCollectionViewSource.cs
一个很好的 CollectionView 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 - 但没有人(除了我!)对此发表评论......很高兴看到它被添加。
聚会有点晚了,但这里有我的工作代码:
- 在 collection
中使用多个部分
- 每个部分使用 header
在您方便的时候更改数据:
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);
}
}
如何在 Xamarin.iOS 和 MVVMCross 中的 UICollectionView 中添加 Section headers。 我只想问最好的方法。我从 2 天开始搜索,但找不到任何简单的方法。我的数据是 List and Section Contain List
我的设计看起来像
要在 UICollectionView 中添加补充视图,您需要覆盖 CollectionViewSource 以提供它们。
MvvmCross 中的基本代码在 https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxCollectionViewSource.cs and https://github.com/MvvmCross/MvvmCross/blob/3.5/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxBaseCollectionViewSource.cs
一个很好的 CollectionView 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 - 但没有人(除了我!)对此发表评论......很高兴看到它被添加。
聚会有点晚了,但这里有我的工作代码:
- 在 collection 中使用多个部分
- 每个部分使用 header
在您方便的时候更改数据:
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);
}
}