Get index of value in ObservableCollection
The documentation for IndexOf() clearly states how it looks for a matching value.


  This method determines equality using the default equality comparer EqualityComparer&lt;T&gt;.Default for T, the type of values in the list.


Which brings you to the documentation for EqualityComparer&lt;T&gt;.Default


  The Default property checks whether type T implements the System.IEquatable&lt;T&gt; interface and, if so, returns an EqualityComparer&lt;T&gt;that uses that implementation. Otherwise, it returns an EqualityComparer&lt;T&gt; that uses the overrides of Object.Equals and Object.GetHashCode provided by T.


You need to be overriding Equals not the == operator. Changing the behavior of the == operator to something other than Object.ReferenceEquals() for reference types should only be considered in rare cases.