title: When collection changed in ObservableCollection add new entries to ReactiveList
body: <p>I have an <code>ObservableCollection</code> which getting filled from a <code>TcpClient</code>. When new data arrives (new Items are added), I want to create new Buttons inside an <code>ItemsControl</code>. It works the old way (with <code>CollectionChanged</code>) but I don't get it work with <em>ReactiveUI</em>. </p>
  
  <p>I'm very new to ReactiveUI, and its quite hard for me to getting started. Could you may help me by putting me on the right path or maybe by providing some sample code?</p>
  
  <p>The Idea:</p>
  
  <pre><code>public class ChooseMachineViewModel : ReactiveObject
  {
      public ReactiveList&lt;Button&gt; ButtonList { get; set; }
      private Dictionary&lt;ushort, Button&gt; addressToButton;
  
      //This one is normaly in another class and will be filled by a TcpClient
      public readonly ObservableCollection&lt;WWSS.Message.CUStatus&gt; ControlUnitsStatus;
  
      public ChooseMachineViewModel()
      {
  
  
  
          //TODO: Make this Reactive!
          //The ButtonList for an ItemsControl
          ButtonList = new ReactiveList&lt;Button&gt;();
          //The Dictonary for addresses -&gt; Button
          addressToButton = new Dictionary&lt;ushort, Button&gt;();
          //The ObservableCollection filled by a TCP Server
          ControlUnitsStatus.CollectionChanged += ControlUnitsStatus_CollectionChanged;
  
      }
  
  
      private void ControlUnitsStatus_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
      {
  
          if (e.NewItems != null)
          {
              foreach (WWSS.Message.CUStatus stat in e.NewItems)
              {
                  TryAddButton(stat);//When new Status arrive, try to create new button
              }
          }
          if (e.OldItems != null)
          {
              foreach (WWSS.Message.CUStatus stat in e.OldItems)
              {
                  TryRemoveButton(stat);//When Status removed, try to remove the button
              }
          }
      }
  
      private bool TryAddButton(WWSS.Message.CUStatus status)
      {
          if (!addressToButton.ContainsKey(status.Address))//if the Address is already in the dictonary don't create a button
          {
              var but = new Button { Content = status.Address.ToString() };
              addressToButton.Add(status.Address, but);
              ButtonList.Add(but);
              return true;
          }
          return false;
      }
      private void TryRemoveButton(WWSS.Message.CUStatus status)
      {
          if (addressToButton.ContainsKey(status.Address))
          {
              ButtonList.Remove(addressToButton[status.Address]);
              addressToButton.Remove(status.Address);
  
          }
      }
  }
  </code></pre>