Xamarin iOS为每个UITableView部分获取重复数据
问题描述:
我为我的Xamarin iOS项目使用MvvmCross。对于我的tableview源文件,我有说,a,b,c,d,e,f,g,h记录和部分(标题):适合的视图的0有3个记录和部分:1有4然后Xamarin iOS为每个UITableView部分获取重复数据
预期结果
科-0 一个 b ç 第-1 d Ë ˚F 克
我得到: 第-0 一个 b Ç 第-1 一个 b Ç d
的记录被重复。我检查了来源,但来源有正确的数据。
问题:再次
在每个部分源是从顶部重新开始的结束,以填补记录
我来源:
查看:
base.DoBind();
var source = new TableSource<string> (Table, ViewModel);
Table.Source = source;
Table.ReloadData();
Table.AlwaysBounceVertical = false;
var set = this.CreateBindingSet<View, ViewModel>();
set.Bind(source).To(vm => vm.CardsList);
set.Apply();
手机:
protected override void DoBind()
{
var set = this.CreateBindingSet<Cell, ListViewModel>();
set.Bind(LblNum).To(vm => vm.CardNumber);
set.Bind(Balance).To(vm => vm.Balance);
set.Apply();
}
CellViewModel
public class ListViewModel : MvxViewModel
{
private string _CardNumber;
public string Number
{
get { return _Number); }
set { _CardNumber = value; }
}
private string _Balance;
public string Balance
{
get { _Balance; }
set { _Balance = value; }
}
任何人都可以请指教如何解决这个
更新
UITableView _tableView;
public TableSource(UITableView tableView, object item) : base(tableView)
{
this.viewModel = item as ViewModel;
this._tableView = tableView;
tableView.RegisterNibForCellReuse(HeaderCell.Nib, HeaderCell.Key); tableView.RegisterNibForCellReuse(UINib.FromName(Cell.Key, NSBundle.MainBundle), Cell.Key);
tableView.RegisterNibForHeaderFooterViewReuse(UINib.FromName(HeaderCell.Key, NSBundle.MainBundle), HeaderCell.Key);
tableView.ReloadData();
var DataDic = new Dictionary<string, List<string>>
{
{ "section1", new List<string> {}},
{ "section2", new List<string> {}},
{ "section3", new List<string> {}}
};
//create the data
var list = new List<TableModel<string>>();
foreach (var section in DataDic)
{
var sectionData = new TableModel<string>()
{
Title = section.Key
};
foreach (var row in section.Value)
{
sectionData.Add(row);
}
list.Add(sectionData);
}
TableItems = list;
}
public override nint NumberOfSections(UITableView tableView)
{
return TableItems.Count;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
int result = 0;
if (section == 0)
{
result = viewModel.NumOfGiftCards;
}
else if (section == 1)
{
result = viewModel.NumOfRewardsCerts;
}
return result;
}
public override nfloat GetHeightForHeader(UITableView tableView, nint section)
{
return section == 2 ? 0f : 74f;
}
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
return indexPath.Section == 2 ? 95f : 62f;
}
public override IEnumerable ItemsSource
{
get
{
return base.ItemsSource;
}
set
{
base.ItemsSource = value;
_tableView.ReloadData();
}
}
public override UIView GetViewForHeader(UITableView tableView, nint section)
{
var header = tableView.DequeueReusableHeaderFooterView(HeaderCell.Key) as HeaderCell;
return header;
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
{
var cell = tableView.DequeueReusableCell(Cell.Key, indexPath) as Cell;
return cell;
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
viewModel.CardDetailsCommand.Execute(null);
}
答
我不认为ItemSource
您正在绑定CardsList
,因为它与您使用表格源的TableItems
,viewModel.NumOfRewardsCerts
或viewModel.NumOfGiftCards
不匹配。
您是否已看了MvxExpandableItemSource(样品为here),它可以处理2个维ItemSources:
private IEnumerable<TItemSource> _itemsSource;
public new IEnumerable<TItemSource> ItemsSource
{
get
{
return _itemsSource;
}
set
{
_itemsSource = value;
_sectionExpandableController.ResetState();
ReloadTableData();
}
}
+0
它调整了ItemSource后,现在运行良好。谢谢。 – TheDeveloper
你可以显示你正在检查哪个部分正在加载?它看起来像你只是重新加载数组。您需要指定哪些部分发生了什么。 – Siriss
如果在第1节中获得了4项,但它们是错误的4,那么'RowsInSection'正在工作,但是'GetItemAt'是错误的。你可以发布你的'MvxTableViewSource'的代码吗? –
@Siriss我正在使用字典,只是从那里添加标题,并从源中加载单元格 – TheDeveloper