title: How do I make a ListBox refresh its item text?
body: <p>I'm making an example for someone who hasn't yet realized that controls like <code>ListBox</code> don't have to contain strings; he had been storing formatted strings and jumping through complicated parsing hoops to get the data back out of the <code>ListBox</code> and I'd like to show him there's a better way.</p>
  
  <p>I noticed that if I have an object stored in the <code>ListBox</code> then update a value that affects <code>ToString</code>, the <code>ListBox</code> does not update itself.  I've tried calling <code>Refresh</code> and <code>Update</code> on the control, but neither works.  Here's the code of the example I'm using, it requires you to drag a listbox and a button onto the form:</p>
  
  <pre><code>Public Class Form1
  
      Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
          MyBase.OnLoad(e)
  
          For i As Integer = 1 To 3
              Dim tempInfo As New NumberInfo()
              tempInfo.Count = i
              tempInfo.Number = i * 100
              ListBox1.Items.Add(tempInfo)
          Next
      End Sub
  
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          For Each objItem As Object In ListBox1.Items
              Dim info As NumberInfo = DirectCast(objItem, NumberInfo)
              info.Count += 1
          Next
      End Sub
  End Class
  
  Public Class NumberInfo
  
      Public Count As Integer
      Public Number As Integer
  
      Public Overrides Function ToString() As String
          Return String.Format("{0}, {1}", Count, Number)
      End Function
  End Class</code></pre>
  
  <p>I thought that perhaps the problem was using fields and tried implementing <em>INotifyPropertyChanged</em>, but this had no effect.  (The reason I'm using fields is because it's an example and I don't feel like adding a few dozen lines that have nothing to do with the topic I'm demonstrating.)</p>
  
  <p>Honestly I've never tried updating items in place like this before; in the past I've always been adding/removing items, not editing them.  So I've never noticed that I don't know how to make this work.</p>
  
  <p>So what am I missing?</p>