ile ObservableCollection ile Karma Grupları Kullanma Bir WPF uygulamasında öğeler listesini korumak için bir ListBox kullanıyorum. ListBox veri kaynağı bir ObservableCollection içinde sarılmış bir HashSet. Bir ICollectionWPF
this.shackSet = new ObservableCollection<Shack>(new HashSet<Shack>());
this.shackListing.ItemsSource = this.shackSet;
... shackListing bir liste kutusu denetimi ve shackSet: yani Aşağıdaki kod var. Ancak, ilk öğenin eklenmesinden sonra shackSet'e bir şey eklediğimde, ListBox'ta birden çok öğe görüyorum. Yani, kümeye eklendiklerine bakılmaksızın yeni eklenen öğeler listeye ekleniyor gibi. Ben ıcollection # imzaları baktığımızda ekleyin:
void Add(T obj);
... ve HashSet # Add:
bool Add(T obj);
... Bu beni sarılı HashSets nerede yeni etkileyen bir hata var inanmak yol açar Eklenen öğeler ListBox'a eklensin, çünkü GözlemlenebilirKoleksiyonun nesnenin aslında toplama koleksiyonuna eklenmiş olup olmadığına dair bir yolu yoktur, çünkü ICollection # Add öğesinin dönüş türü geçersizdir. Bunu başka biri onaylayabilir mi?
Tabii HashSet doğrudan bağlayabilir, ancak bir öğe eklenirse WPF fark etmez. Açıklama için –
+1. Bununla birlikte, önerilen çözümle ilgili olarak, HashSet'ten miras almayı ve INotifyCollectionChanged'ı uygulamayı tercih ediyorum.Thomas'ın “HashSet” 'ten miras kalmaması ve 'HashSet' yöntemlerinin sanal olmadığı ve geçersiz kılınamayacağı için 'INotifyCollectionChanged' komutunu kullanamayacağınız hariç, –
+1. “ICollection” u uygulamak zorunda kalacaksınız ve uygulamanızın, _wrap_ 'HashSet 'olması ve tüm mutasyon yöntemlerinde bildirimleri yükseltmesi gerekecektir. –