Search code examples
c#wpfidataerrorinfo

How does IDataErrorInfo.this[string propertyName] work in C#?


I've always implemented the IDataErrorInfo interface without actually wondering what this line means and how it works.

string IDataErrorInfo.this[string propertyName]
{
    get { return this.GetValidationError(propertyName); }
}

How does .this[string propertyName] work, and when/how does this property get called?


Solution

  • this[key] is in fact an indexer, and is somewhat of a cross between a property and a method. It acts like a property since you can bind to it, but as opposed to regular properties, it receives a parameter.

    Behind the scenes it's implemented as a method - get_Item(key), and if you'd want to access it via reflection you'd need to use Item for a name. For example:

    typeof(MyClass).GetProperty("Item");
    

    This is also important to know when implementing INotifyPropertyChanged, in which case, "Item[]" or Binding.IndexerName should be used as a property name in order to update the UI.