According to the documentation, the Count of a filtered CollectionView should only be the count of items that pass the filter. Given this code:
List<string> testList = new List<string>();
testList.Add("One");
testList.Add("Two");
testList.Add("Three");
testList.Add("1-One");
testList.Add("1-Two");
testList.Add("1-Three");
CollectionView testView = new CollectionView(testList);
int testCount1 = testView.Count;
testView.Filter = (i) => i.ToString().StartsWith("1-");
int testCount2 = testView.Count;
I would therefore expect testCount1 to be 6, and testCount2 to be 3. However, both are 6. If I manually iterate through the CollectionView and count the items, I do get 3, but Count returns 6 always.
I've tried calling Refresh on the CollectionView, just to see if that would correct the result, but there was no change. Is the documentation wrong? Is there a bug in CollectionView? Am I doing something wrong that I just can't see?
Try
ICollectionView _cvs = CollectionViewSource.GetDefaultView(testList);
instead of
CollectionView testView = new CollectionView(testList);
If you switch to ListCollectionView, then it works as expected:
CollectionView testView = new ListCollectionView(testList);
int testCount1 = testView.Count;
testView.Filter = (i) => i.ToString().StartsWith("1-");
int testCount2 = testView.Count;
This seems to work for CollectionView, so this definitely points to a bug:
CollectionView testView = new CollectionView(this.GetTestStrings());
private IEnumerable<string> GetTestStrings() {
yield return "One";
yield return "Two";
yield return "Three";
yield return "1-One";
yield return "1-Two";
yield return "1-Three";
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With