Mvvmcross - 从不调用TableViewsource的GetOrCreateCellFor

时间:2017-01-08 00:34:52

标签: c# xamarin.ios mvvmcross

我正在尝试在viewmodel和tableviewsource之间设置绑定。但是从不调用tableviewsource中的方法GetOrCreateCellFor。

这是我的代码:

的ViewController:

public partial class MainView : MvxViewController
{

    public MainView() : base("MainView", null)
    {
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        var source = new TableViewDataSource(FloorTableView);
        this.CreateBinding(source).To((MainViewModel vm) => vm.Floors).Apply();

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

视图模型:

public class MainViewModel : MvxViewModel
{

    DataService DataService;
    ObservableCollection<Category> _Floors = new ObservableCollection<Category>();

    public ObservableCollection<Category> Floors
    {
        get
        {
            LoadFloors();
            return _Floors;
        }
        set
        {
            _Floors = value; RaisePropertyChanged(() => Floors);
        }
    }

    void LoadFloors()
    {
        _Floors.Add(new Category { 
            Name = "Test"
        });

    }

}

TableViewSource:

public class TableViewDataSource : MvxTableViewSource
{

    private static string CellId = "FloorCell";

    public TableViewDataSource(UITableView tableView) : base(tableView)
    {
        tableView.RegisterNibForCellReuse(FloorCell.Nib, CellId);
    }


    public override System.nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
    {
        return 50;
    }


    protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
    {
        //this method never called
        return tableView.DequeueReusableCell(CellId, indexPath);
    }
}

FloorCell是简单的空tableview单元格,它扩展了MvxTableViewCell。

问题出在哪里?

2 个答案:

答案 0 :(得分:1)

需要来实现RowsInSection方法,否则不会调用该方法。

您还需要确保UITableView实际上设置了Frame您自己设置的一个或通过自动布局约束。如果高度或宽度为0,则不会调用该方法。

答案 1 :(得分:1)

如果您的表格视图的高度至少低于包含页脚/标题大小的项目,则可能会发生这种情况。所以一定要适当地计算高度(有一个项目可用,它会向你的表视图添加滚动,但会调用GetOrCreateCell)。