• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Xamarin - UITableView 重新加载数组的数据

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:14:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我使用 TableSource 的新类在 Xamarin 上实现了 UITableView。我正在从 MainView 初始化 TableSource 并传递一个数组。然后我尝试从 MainView 更新该数组,但出现错误:

Object reference not sent to an instance

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 中的数据。



Best Answer-推荐答案


我的感觉是 updateArraytableSource = new ListTableSource(this); 之前执行,因此 tableSource 为空。 lVM.getInitialData(100); 可能会触发 updateArray

关于ios - Xamarin - UITableView 重新加载数组的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223156/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap