2016-05-23 8 views
2

ich vor kurzem eine Frage auf Codereview (CodeReview Question) veröffentlicht und im Anschluss an ihre Ratschläge, die ich bin auf der Suche von einem ObservableCollection zu einem ICollectionView zu einem ListCollectionView statt wie scheinbar bewegt ein ListCollectionView hat eine bessere Filterleistung.Implenting Listcollectionview Von ObservableCollection

Was ich im Moment mache ist das;

Contracts = await ReturnContracts(); 
ContractsICollectionView = CollectionViewSource.GetDefaultView(Contracts); 
DataContext = this; 

Wo Contracts ist die ObservableCollection und ContractsICollectionView ist die ICollectionView. Wenn ich stattdessen eine ListCollectionView benutze, bekomme ich diesen Fehler;

Konvertierung von ICollectionView in ListCollectionView nicht möglich.

Hier ist die Definition von Contracts und ContractsListCollectionView;

public ObservableCollection<ContractModel> Contracts; 
public ListCollectionView ContractsListCollectionView { get; private set; } 

Meine Frage ist, wie ich ListCollectionView und nutzen Sie die verbesserten Filter umsetzen kann?

Antwort

2

erklären Gerade ContractsListCollectionView wie folgt aus:

public ICollectionView ContractsListCollectionView { get; private set; } 

Alternativ, wenn Sie wirklich ListCollectionView Methoden verwenden müssen, und zwar nicht nur ICollectionView (beachten Sie, dass ListCollectionView Geräte ICollectionView), dann müssen Sie eine Besetzung machen:

ContractsICollectionView = (ListCollectionView) CollectionViewSource.GetDefaultView(Contracts); 

Beachten Sie, dass während für ObservableCollectionCollectionViewSource.GetDefaultView in der Tat ListCollectionView zurückgibt - für andere Sammlungstypen möglicherweise nicht das gleiche und die Besetzung wird fehlschlagen. Da Sie es jedoch nur mit ObservableCollection verwenden - Cast ist in Ordnung.

+0

Danke für Ihre Antwort. Ich versuche 'ListCollectionView' zu verwenden, weil es mit großen DataSets (ich habe ungefähr 28000 zu filternde Unternehmen) eine erhöhte Leistung hat. – CBreeze

+0

In beiden Methoden oben wird der _underlying_ Typ ListCollectionView sein. Nur im ersten Fall greifen Sie über die Schnittstelle (ICollectionView) und im zweiten Fall direkt darauf zu. Also, wenn Sie es nicht direkt verwenden und zum Beispiel nur Ihr Gitter daran binden, verwenden Sie zuerst appoint. – Evk