title: Cannot data bind to a control when Control.Visible == false
body: <p>In WinForms with C# 4.0 / C# 2.0, I cannot bind to a control if the control's visible field is false:</p>
  
  <pre><code>this.checkBox_WorkDone.DataBindings.Add("Visible", WorkStatus, "Done");
  </code></pre>
  
  <p>I can confirm the binding is successfully added to the control's databindings list but if I change my bound object (WorkStatus), nothing happens.  </p>
  
  <p>This is what WorkStatus looks like:</p>
  
  <pre><code>public class WorkStatus : INotifyPropertyChanged
  {
      private Boolean _done;
      public Boolean Done
      {
          get { return _done; }
  
          set
          {
              if (_done == value) return;
  
              _done = value;
  
              // fire event
              RaisePropertyChanged("Done");
          }
      }
  
      private Int32 _time;
      public Int32 Time
      {
          get { return _time; }
  
          set
          {
              if (_time == value) return;
  
              _time = value;
  
              // fire event
              RaisePropertyChanged("Time");
          }
      }
  
      public event PropertyChangedEventHandler PropertyChanged;
  
      protected void RaisePropertyChanged(String propertyName)
      {
          OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
      }
  
      protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
      {
          if (PropertyChanged != null) { PropertyChanged(this, e); }
      }
  }
  </code></pre>
  
  <p><strong>Edit</strong><br>
  To reproduce, just set the Visible=false in the designer, or in the constructor before the databinding.<br>
  Using one overload of the Add() method fails too:    </p>
  
  <pre><code>this.checkBox_WorkDone.DataBindings.Add("Visible", WorkStatus, "Done",
     true, DataSourceUpdateMode.OnPropertyChanged);
  </code></pre>
  
  <p>The reason I want to hide the control is that I don't want user to see the control when the form is shown the very first time.  </p>
  
  <p><strong>Solution</strong><br>
  Thanks guys, I think I find a solution for this:   </p>
  
  <p>just set the Control.Visible = false in the Form.Load() event. In that case the control is not visible when the form is shown.  </p>
  
  <p>Although, why MS design the data binding in this way is still unknown.</p>