MvxBindableCollectionViewSource的实现

时间:2013-04-04 19:31:22

标签: xamarin.ios xamarin mvvmcross

我是Mvvmcross框架的新手,目前正在探索它的iOS部分(哦,也是iOS开发的新手,以绘制我当前情况的精美图片^^)。我正在使用vNext版本。

我发现了对UICollectionViewController(MvxTouchCollectionViewController和MvxBindableCollectionViewSource)实现的引用,但这些类似乎只是未来实现的框架(抽象类,至少缺少一种MvxSimpleBindableCollectionViewSource)。我没有找到使用此功能的示例。 我还发现了一个来自Stuart的博客文章,让我假设他正在研究这一部分(Work In Progress - MvvmCross lists sample)。

是否有人已经使用此部分并了解实现或使用示例?

我看了一下Stuart在其文章中提到的xaminar的10分钟,看起来非常有趣,对我来说是一个很好的起点。

1 个答案:

答案 0 :(得分:1)

我在几个客户应用程序中使用了集合视图控制器,但我认为我没有发布任何使用它的开源示例。

从本质上讲,collectionview的使用与tableview和cell的使用非常相似 - 详见:http://slodge.blogspot.co.uk/2013/01/uitableviewcell-using-xib-editor.html

在vNext中,示例控制器可能如下所示:

public class MyCollectionView : BaseCollectionView<MyCollectionViewModel>
{
    private bool _needToCallViewDidLoadManually;

    public HubView (MvxShowViewModelRequest request)
        : base(request, new UICollectionViewFlowLayout (){
            ItemSize= new System.Drawing.SizeF (100, 100),
            MinimumInteritemSpacing = 20.0f,
            SectionInset = new UIEdgeInsets (10,50,20,50),
            ScrollDirection = UICollectionViewScrollDirection.Vertical,

        })
    {
        if (_needToCallViewDidLoadManually) {
            ViewDidLoad();
        }
    }

    public override void ViewDidLoad ()
    {
        if (ShowRequest == null) {
            _needToCallViewDidLoadManually = true;
            return;
        }

        base.ViewDidLoad ();

        _needToCallViewDidLoadManually = false;

        var source = new CollectionViewSource(CollectionView);

        this.AddBindings(
            new Dictionary<object, string>()
            {
            { source, "ItemsSource TheItems" }
        });

        CollectionView.Source = source;
        CollectionView.ReloadData();
    }

    public class CollectionViewSource : MvxBindableCollectionViewSource
    {
        public CollectionViewSource (UICollectionView collectionView)
            : base(collectionView, MyViewCell.Identifier)
        {
            collectionView.RegisterNibForCell(UINib.FromName(MyViewCell.Identifier, NSBundle.MainBundle), MyViewCell.Identifier);
        }
    }
}

如果您现在正在开始开发,那么您也可以从考虑刚刚进入Beta的v3分支中受益。