Well, I was wrong. The problem is actually Equals() compared to ReferenceEquals() .
This is even the same behavior when I use a helper class with a string property to display in a ListView.
Not really. You get the same behavior if you use an anonymous helper class.
Why doesn't wrapping an anonymous type around the string fix the problem? As described here , when creating an anonymous type, the compiler creates a common Equals() method that returns true if the objects are of the same (anonymous) type and their properties have the same value.
The solution is to implement a real (not anonymous) class - it can be that simple:
public class Item { public string Display { get; set; } }
Object.Equals() makes a reference comparison, so until you redefine it, you get the behavior you expect.
source share