2017-02-16 56 views
2

我爲我的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); 
     } 
+0

你可以顯示你正在檢查哪個部分正在加載?它看起來像你只是重新加載數組。您需要指定哪些部分發生了什麼。 – Siriss

+0

如果在第1節中獲得了4項,但它們是錯誤的4,那麼'RowsInSection'正在工作,但是'GetItemAt'是錯誤的。你可以發佈你的'MvxTableViewSource'的代碼嗎? –

+0

@Siriss我正在使用字典,只是從那裏添加標題,並從源中加載單元格 – TheDeveloper

回答

1

我不認爲ItemSource您正在綁定CardsList,因爲它與您使用表格源的TableItems,viewModel.NumOfRewardsCertsviewModel.NumOfGiftCards不匹配。

您是否已看了MvxExpandableItemSource(樣品爲here),它可以處理2個維ItemSources:

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

     ReloadTableData(); 
    } 
} 

它以展開和摺疊從頭交​​易,見下文,但你可以禁用該功能,並強制他們一直在擴大: enter image description here

+0

它調整了ItemSource後,現在運行良好。謝謝。 – TheDeveloper