c# - 如何在 MonoTouch 的 UITableView 中重新加载数据?

标签 c# iphone mono xamarin.ios

在我的应用程序中,我将在线 Web 服务中的数据显示到多个 UITableView 中。我为用户添加了几种更新数据的方法,但是TableView.ReloadData() 方法似乎不起作用。 当用户请求更新时,我从服务器获取一组新数据,将其传递给附加到 UITableViewController 的 UITableViewSource 实例,然后调用 ReloadData() 方法,不幸的是,该方法实际上并没有重新加载数据。只有在我返回主屏幕然后返回 TableView (因为它已经创建,我只显示已经存在的实例)后,新数据才会显示在 TableView 中。 我究竟做错了什么?我尝试在更新数据时创建 UITableViewSource 的新实例,但这也无济于事。

下面是将数据加载到 tableview 的代码(我将它重复用于需要将数据加载到其中的任何事件):

 dataControl.GetList(Tables.UPDATES)); //gets data from the server and passes it to the SQL database
 Source source = GetSource(theType.Name, theType, groups); //creates a new source loaded with the data
 Updates.TableView.Source = source;
 Updates.TableView.AllowsSelection = false;     
 Updates.TableView.ReloadData();

这段代码当然是在调用主线程的单独线程中执行的。 当用户请求更新时,基本上会调用相同的代码(在后台线程工作时播放动画)。

最佳答案

Pavel is correct - 尝试以下操作,看看它是否有效:

InvokeOnMainThread(delegate{
    Updates.TableView.Source = source;
    Updates.TableView.AllowsSelection = false;
    Updates.TableView.ReloadData();
});

将来,无论何时您要处理会更改当前显示的 UI 的内容,您都需要确保它发生在主线程(也称为 GUI 线程)上。此 InvokeOnMainThread 是 NSObject 中的一个方法,因此可以在所有 UIViews/UIViewControllers 等中像上面那样调用 - 您也可以从完全 C# 中调用它类使用:

MonoTouch.UIKit.UIApplication.SharedApplication.InvokeOnMainThread(delegate{ /*code here*/ });

关于c# - 如何在 MonoTouch 的 UITableView 中重新加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148716/

相关文章:

c# - 从 MVC 中的部分 View 加载菜单

iphone - iPhone 上的长双倍

iphone - 如何使用mapkit检查iPhone的当前位置是否在特定区域内

linux - 无法在嵌入式 Linux 上构建 MonoDevelop

c# - 如何在Linux环境下制作自己的夏令时表?

c# - Linq - 对每个类进行分组

c# - 如何使用 ONVIF 验证 AXIS 摄像机

c# - 领域逻辑与数据验证

iphone - 为什么 atos 命令无法为我的 iOS 崩溃日志找到符号?

macos - 什么用作在 OSX 上开发 asp.net vNext + Entity Framework 7 的数据库