Son zamanlarda, PCL ListView'ımda sonsuz kaydırma/tembel yükleme yapmak zorunda kaldım. Ben kod çoğunu bırakacaktır, ama en önemli parçası oldu:Xamarin Formlar: ObservableCollection her zaman kullanıcı arabiriminde ayarlanmalı/güncellenmeli?
ViewModel
var countries = // get countries
foreach (var country in countries)
{
// Countries is an ObservableCollection<Country>
Countries.Add(country);
}
Bu Android'de iyi iş gibi görünüyordu, ama iOS'ta, ben menzil istisnalar özellikle çıkıyorum tuttu listeyi hızlıca kaydırdığımda. Düzeltme benim için bu kodu ana kullanıcı arabiriminde çalıştırıyordu.
// wrap the code with this
Device.BeginInvokeOnMainThread(async() => {});
Sorum artık tüm görünüm modeli hizmeti daima UI iş parçacığı olarak yapılmak güncelleme veya ayarlanmış bir gözlemlenebilir koleksiyon çağırır gerektiği nedir?
Countries
ayarlanmış birkaç komutum var. UI thread bloğu olmadan iyi çalışıyorlar. Ben sadece yukarıda belirtildiği gibi öğeleri ekleyerek ile sorunları vardı.
ObservableCollection her zaman kullanıcı arabiriminde ayarlanmalı ve güncellenmeli mi?
Teşekkürler. Xamarin iş parçacığı anahtarını işliyorsa, neden Thread-safe ObservableCollection kullanmalıyım? – Mark13426
Çünkü ** siz onu farklı konulardan değiştirmek isteyebilirsiniz. – nicks
, Xamarin'in UI iş parçacığı üzerinde UI nesnelerini (VM'deki değişikliklere bağlı olarak) güncelleştireceğini garanti eder. VM'yi aynı iş parçacığında güncellemeniz veya iş parçacığı güvenli nesneleri kullanmanız size kalmış. – nicks