我在Xamarin上使用TableSource的新类实现了UITableView。我正在从MainView初始化TableSource并传递一个数组。然后我试图从MainView更新该数组,我收到错误:
对象引用未发送到实例
MainVC中的代码:
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
//Console.WriteLine("Event 1");
lVM = new ListViewModel();
lVM.dataUpdated += this.updateArray;
lVM.dataUpdatedNetwork += this.networkUpdatedSQL;
lVM.getInitialData(100);
tableSource = new ListTableSource(this);
tableV.Source = tableSource;
}
public void updateArray(object sender, EventArgs e) {
InvokeOnMainThread(delegate
{
//Console.WriteLine("Update array event on VC for SQL count for array " + lVM.ordersArray.Count);
tableSource.updateArray(lVM.ordersArray);
tableV.ReloadData();
});
}
TableSource中的代码:
public class ListTableSource : UITableViewSource
{
ListViewController listVCRef;
ArrayList tableItems;
string cellIdentifier = "TableCell";
public ListTableSource(ListViewController listVC)
{
tableItems = new ArrayList();
listVCRef = listVC;
}
public void updateArray(ArrayList items) {
tableItems = new ArrayList(items);
Console.WriteLine("Items " + tableItems.Count);
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
new UIAlertView("Alert", "You touched: " + tableItems[indexPath.Row], null, "OK", null).Show();
tableView.DeselectRow(indexPath, true);
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell(cellIdentifier);
if (cell == null)
{
cell = new UITableViewCell(UITableViewCellStyle.Subtitle, cellIdentifier);
}
Order currentOrder = tableItems[indexPath.Row] as Order;
cell.TextLabel.Text = currentOrder.comment;
cell.DetailTextLabel.Text = currentOrder.orderDate.ToString();
return cell;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return tableItems.Count;
}
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
return 80;
}
}
我的方法有误吗?我应该如何更新TableSource中的数据。
答案 0 :(得分:2)
我的感觉是loadSettings(String^ name)
在updateArray
之前执行,因此tableSource = new ListTableSource(this);
为空。 tableSource
可能会触发lVM.getInitialData(100);
。
答案 1 :(得分:0)
这个工人是我的
button.TouchUpInside += (s, e) => {
tableItems.Add(textfield1.Text); //(1)
table = new UITableView(View.Bounds);
table.Source = new TableView(tableItems.ToArray()); //(2)
table.Frame = new CoreGraphics.CGRect(0, 350, this.View.Frame.Width, 300); //(3)
Add(table);
};
在(1)列表tableItem中添加uiTextField的新值
在(2)中实际上是表的Source中的数据
在(3)中直观地创建表格