gpt4 book ai didi

ios - Xamarin iOS 获取每个 UITableView 部分的重复数据

转载 作者:行者123 更新时间:2023-12-01 19:39:36 24 4
gpt4 key购买 nike

我正在将 MvvmCross 用于我的 Xamarin iOS 项目。对于我的tableview源,我说过,a,b,c,d,e,f,g,h记录和合适 View 的section(header):0有3条记录,section:1有4条记录,然后

预期结果

第 0 节A乙C第1节deF克

我得到:第0节A乙C第1节A乙Cd

记录正在重复。我检查了来源,但来源有正确的数据。

问题:

在每个部分的末尾,源再次从顶部重新启动以填充记录

我的来源:

查看:

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);
}

最佳答案

我认为您将 CardsList 绑定(bind)到的 ItemSourceTableItemsviewModel 不匹配。 NumOfRewardsCertsviewModel.NumOfGiftCards 您正在使用表源。

您看过MvxExpandableItemSource吗? (示例为 here )它可以处理二维 ItemSource:

private IEnumerable<TItemSource> _itemsSource;
public new IEnumerable<TItemSource> ItemsSource
{
get
{
return _itemsSource;
}
set
{
_itemsSource = value;
_sectionExpandableController.ResetState();

ReloadTableData();
}
}

它处理标题的展开和折叠,请参见下文,但您可以禁用该功能并强制它们始终展开: enter image description here

关于ios - Xamarin iOS 获取每个 UITableView 部分的重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42277265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com