我正在尝试在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。
问题出在哪里?
答案 0 :(得分:1)
你需要来实现RowsInSection
方法,否则不会调用该方法。
您还需要确保UITableView
实际上设置了Frame
您自己设置的一个或通过自动布局约束。如果高度或宽度为0,则不会调用该方法。
答案 1 :(得分:1)
如果您的表格视图的高度至少低于包含页脚/标题大小的项目,则可能会发生这种情况。所以一定要适当地计算高度(有一个项目可用,它会向你的表视图添加滚动,但会调用GetOrCreateCell)。