bir ObservableCollection bir öğeyi kaldırın. Ben ObservableCollection alt sınıfı veya görünümünde herhangi bir tür kullanabilmek için değilim, bu yüzden yasaklanmış öğelerle ilgili bir .remove() gerçekleştirmek için tanımlanmış bir olay işleyicisi (CollectionChanged) kullanılarak sınırlı görünüyor. Öğeler, olayın ortaya çıkarılması ve daha sonra ele alınması arasındaki kısa süre için mevcutsa iyi olur; öğeler koleksiyonda kalmamalı. CollectionChanged olay işleyicisindeki .Remove() çağrılmasına izin verilmiyor. Çalışma zamanında. NET'te bir InvalidOperationException:Onların bir ObservableCollection eklendikten sonra bazı öğeleri reddetmek mümkün umuyorum bir CollectionChanged olay işleyicisi
Şahsen .NET bana izin vermelidir düşünüyorum. Sonsuz bir döngü oluşturursam, bu benim kendi hatam. Ben gibi görünecektir kullanmak istiyorum"Bir CollectedChanged olayı sırasında GözlenebilirKoleksiyon değiştirilemez.
kodu:
myCollection.CollectionChanged += (sender, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Remove)
return;
foreach (var itm in myCollection)
{
if (itm.name == "Fred")
myCollection.Remove(itm);
}
}
Elimde ne seçenekler emin değilim. Bir dağıtıcı kullanmak işe yaramıyor. Başka bir olayı tetiklemek ve .Remove çağrısını başka bir işleyiciye yerleştirmek, akla gelen diğer tek seçenek.
Bir ObservableCollection öğesinden öğeleri kaldıramazsınız. Bu bir bütünün bütünüdür ... Sadece sardığı koleksiyondan öğeleri kaldırabilirsiniz. –
Toplama değiştirilen olay işleyicisinde bunu yapmamalısınız. Bunun yerine, koleksiyonun değiştirilmesine izin vermeden önce filtreyi yapın. Uygun bir değişiklik olmaması durumunda koleksiyonun değiştirilmesine izin vermeyin. –
Bunun eski olduğunu ve muhtemelen yapmanın 'doğru' yolunun olmadığını biliyorum; ama yaptım ve birilerine yardım edebilirim. OberservableCollection öğesinden seçili dosyaları silmeye çalışırken bu özel durumla aynı sorunu yaşıyordum. İkinci dosya kaldırma isteği Messenger'ım tarafından işlendiğinde, CollectionChange olayı hala duruyordu. Yani benim CollectionChanged olay işleyicisi içinde, ben 'kilit (this.Files) eklemek zorunda {// Olay Kod} Bunu yapan kez' Ben yine benim programı koştu ve çoklu dosya seçilir ve sil tuşuna basın. Bu sefer istisnasız, çünkü Kaldırmak zorunda kaldı. – famousKaneis