6 sütunlu bir DataGrid içinde bir 3000 max ObservableCollection filtre uygulamak istiyorum. Kullanıcı, tüm 6 sütunu "& &" şeklinde filtrelemeli.LINQ vs CollectionView ile bir koleksiyon filtrele
Bunun için LINQ veya CollectionView kullanmalı mıyım? LINQ, bazı www örneklerini denemekten daha hızlı görünüyordu. Herhangi bir yanlısı var mı?
GÜNCELLEME: Eğer probabaly CollectionView'ın kullanmalıdır interaktif (? DataGrid) deneyimi için
private ObservableCollection<Material> _materialList;
private ObservableCollection<Material> _materialListInternal;
public MaterialBrowserListViewModel()
{
_materialListInternal = new ObservableCollection<Material>();
for (int i = 0; i < 2222; i++)
{
var mat = new Material()
{
Schoolday = DateTime.Now.Date,
Period = i,
DocumentName = "Excel Sheet" + i,
Keywords = "financial budget report",
SchoolclassCode = "1",
};
_materialListInternal.Add(mat);
var mat1 = new Material()
{
Schoolday = DateTime.Now.Date,
Period = i,
DocumentName = "Word Doc" + i,
Keywords = "Economical staticstics report",
SchoolclassCode = "2",
};
_materialListInternal.Add(mat1);
}
MaterialList = CollectionViewSource.GetDefaultView(MaterialListInternal);
MaterialList.Filter = new Predicate<object>(ContainsInFilter);
}
public bool ContainsInFilter(object item)
{
if (String.IsNullOrEmpty(FilterKeywords))
return true;
Material material = item as Material;
if (DocumentHelper.ContainsCaseInsensitive(material.Keywords,FilterKeywords,StringComparison.CurrentCultureIgnoreCase))
return true;
else
return false;
}
private string _filterKeywords;
public string FilterKeywords
{
get { return _filterKeywords; }
set
{
if (_filterKeywords == value)
return;
_filterKeywords = value;
this.RaisePropertyChanged("FilterKeywords");
MaterialList.Refresh();
}
}
public ICollectionView MaterialList { get; set; }
public ObservableCollection<Material> MaterialListInternal
{
get { return _materialListInternal; }
set
{
_materialListInternal = value;
this.RaisePropertyChanged("MaterialList");
}
}
. Aşağıdaki özellikte .Refresh() yöntemini yerleştirdiğimde koleksiyonun neden güncelleştirildiğini biliyor musunuz? private string _filterKeywords Genel dizge FilterKeywords { {return _filterKeywords; set { (_filterKeywords == değer) döndürse; _filterKeywords = value; this.RaisePropertyChanged ("FilterKeywords"); MaterialList.Refresh(); } } – Elisabeth
"Nedenini biliyor musun?" - Hayır, ama belki de bu kodu soruyu okuyabilseydim, okuyabiliyordum. –
tamam Henk Tüm önemli kodları yayınladım! iyi geceler ;-) – Elisabeth