2016-04-13 7 views
0

Ich habe eine benutzerdefinierte TableViewSource, die von MvxSimpleTableViewSource erbt:ArgumentOutOfRangeException in MvxTableViewSource.GetItemAt

public class MyTableViewSource : MvxSimpleTableViewSource 
{ 
    private readonly MyViewModel viewModel; 

    public MyTableViewSource(MyViewModel viewModel, UITableView tableView) 
     : base(tableView, MyTeaserCell.Key, MyTeaserCell.Key) 
    { 
     this.viewModel = viewModel; 
    } 

    public override nint RowsInSection(UITableView tableview, nint section) 
    { 
     return this.viewModel.Items.Count; 
    } 
} 

Manchmal GetItemAt, die nicht von mir außer Kraft gesetzt wird, wirft eine ArgumentOutOfRangeException.

Der Stacktrace ist:

Parameter name: index', reason: 'System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. 
Parameter name: index 
at System.ThrowHelper.ThrowArgumentOutOfRangeException() <0x2bef74 +  0x00038> in <filename unknown>:0 
at System.Collections.Generic.List`1[T].get_Item (Int32 index) <0x19f620 + 0x0002f> in <filename unknown>:0 
at System.Collections.ObjectModel.Collection`1[T].System.Collections.IList.get_Item (Int32 index) <0x1a6ff4 + 0x0004f> in <filename unknown>:0 
at MvvmCross.Binding.ExtensionMethods.MvxEnumerableExtensions.ElementAt (IEnumerable items, Int32 position) <0x8fceac + 0x00103> in <filename unknown>:0 
at MvvmCross.Binding.iOS.Views.MvxTableViewSource.GetItemAt (Foundation.NSIndexPath indexPath) <0x958830 + 0x00053> in <filename unknown>:0 
at MvvmCross.Binding.iOS.Views.MvxBaseTableViewSource.GetCell (UIKit.UITableView tableView, Foundation.NSIndexPath indexPath) <0x957940 + 0x0002f> in <filename unknown>:0 
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
at UIKit.UIApplication.Main (System.String[] args, IntPtr principal, IntPtr delegate) <0x834b50 + 0x00033> in <filename unknown>:0 
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) <0x834a78 + 0x000cb> in <filename unknown>:0 
at App.Application.Main (System.String[] args) <0xc66cc + 0x0002f> in <filename unknown>:0 ' 

Im Moment kann ich nicht klar, diese Ausnahme reproduzieren, aber es kommt vor 2 bis 3 mal pro Tag. Es scheint mir, dass GetItemAt manchmal aufgerufen wird, bevor die ItemsSource Elemente hat.

Antwort

0

Sie haben keine eigene Klasse brauchen MyTableViewSource, nur MvxSimpleTableViewSource verwenden, um direkt

var source = new MvxSimpleTableViewSource (tableView, MyTeaserCell.Key, MyTeaserCell.Key); 

//apply binding 
set.Bind(source).To(vm=>vm.Items); 

Ein anderer Weg innen MyTableViewSource, müssen nur entfernenRowsInSection. Es ist bereits implementiert mit ItemsSource.Count

+0

Ich habe eine benutzerdefinierte Klasse verwendet, weil ich weiß, dass ich einige andere Funktionen wie Bearbeitung usw. implementieren muss. Aber der Rat, "RowsInSection" zu entfernen, klingt gut. Ich werde es versuchen... –

Verwandte Themen