Mar*_*426 7 observablecollection mvvm ui-thread xamarin.forms
最近,我不得不在我的PCL ListView上实现无限滚动/延迟加载.我将遗漏大部分代码,但最重要的部分是:
视图模型
var countries = // get countries
foreach (var country in countries)
{
// Countries is an ObservableCollection<Country>
Countries.Add(country);
}
Run Code Online (Sandbox Code Playgroud)
这似乎在Android上运行良好,但在iOS上,我不断超出范围异常,特别是当我快速滚动列表时.我的修复是在主UI线程中运行此代码.
// wrap the code with this
Device.BeginInvokeOnMainThread(async () => {});
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,所有查看更新或设置可观察集合的模型服务调用是否应始终在UI线程中执行?
我有几个命令设置 Countries.没有UI线程块,它们似乎工作正常.我只有如上所述添加项目的问题.
是否应始终在UI线程中设置和更新ObservableCollection?
ObservableCollection 本身不是线程安全的。但是,您可以从非 UI 线程更改 ViewModel 属性(其中包括 ObservableCollections),因为更新 UI 视图本身属性的代码将在 UI 线程上运行。Xamarin 会自行处理。尝试使用线程安全的ObservableCollection。
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |