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?
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.