INotifyPropertyChanged and propertyName
<p>I was never sure about the meaning of <code>propertyName</code> when implementing <code>INotifyPropertyChanged</code>. So generally you implement <code>INotifyPropertyChanged</code> as:</p>

<pre><code>public class Data : INotifyPropertyChanged {
   public event PropertyChangedEventHandler PropertyChanged;

   private void NotifyPropertyChanged(string propertyName = "") {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

   private string itsID;
   public string ID { 
             get { return itsID; }
             set { 
                   if (itsID != value) {
                     itsID = value; 
                     NotifyPropertyChanged("ID");
                  }
   }
}
</code></pre>

<p>I was never sure about the <code>propertyName</code> argument to <code>NotifyPropertyChanged(string propertyName)</code>. </p>

<ol>
<li>Can that be any arbitrary string (like "MyID" in the above example)? </li>
<li>Or does .NET use Reflection to align it with a property in a class so it has to match the name of the property exactly? </li>
<li>What if the <code>propertyName</code> doesn't match the name of the <code>Property</code> exactly, does .NET consider the entire object as <code>changed</code>?</li>
</ol>