title: Do I need a BindingSource AND a BindingList for WinForms DataBinding?
body: <p>I want to display a list of people in a <code>DataGridView</code> in a Windows Forms app.  I want my service layer to return a list of Person objects (e.g., <code>IList&lt;Person&gt;</code>).  I want changes in the list to be reflected in the <code>DataGridView</code> and vice versa.  My understanding is that using the <code>BindingSource</code> facilitates working with <code>DataGridView</code>.  My question is for the two-way databinding to work, do I need:</p>
  
  <pre><code>//pseudo code
  BindingSource.DataSource = IBindingList&lt;Person&gt;
  </code></pre>
  
  <p>or can I do:</p>
  
  <pre><code>BindingSource.DataSource = IList&lt;Person&gt;
  </code></pre>
  
  <p>What's the difference?  If my make changes to the list will the <code>DataGridView</code> be updated either way?  And if I have to use the <code>BindingList</code>, it seems a little wonky (because of creating a dependency) to return a <code>BindingList</code> from my service layer, is there a way around that?</p>
  
  <p>Microsoft says of the <code>BindingList</code> (in the Remarks section)
  <a href="http://msdn.microsoft.com/en-us/library/ms132679.aspx" rel="noreferrer">http://msdn.microsoft.com/en-us/library/ms132679.aspx</a>:</p>
  
  <blockquote>
    <p>"However, the typical solutions
    programmer will use a class that
    provides data binding functionality,
    such as <code>BindingSource</code>, instead of
    directly using <code>BindingList&lt;T&gt;</code>."</p>
  </blockquote>