title: Force reevalution of guard methods in Caliburn Micro
body: <p>I have an ItemsControl which has a move up, move down, and delete button in each item (via template).  My ItemsControl source binds to a collection of Items which are model DataContracts/POCOs (not VMs).    </p>
  
  <p>I've attached a Caliburn message handler in my <em>main page's</em> view model.</p>
  
  <pre><code>&lt;Button cal:Message.Attach="MoveUp($dataContext)" &gt;Up&lt;/Button&gt;
  &lt;Button cal:Message.Attach="MoveDown($dataContext)" &gt;Down&lt;/Button&gt;
  </code></pre>
  
  <p>I believe I had to be explicit with cal:Message.Attach and not rely on convention because I was within my ItemTemplate. </p>
  
  <p>View Model:</p>
  
  <pre><code>    ObservableCollection&lt;Item&gt; MyCollection = new ObservableCollection&lt;Item&gt;();  
      //Item class is simple -- only has a string Name property 
  
      public bool CanMoveUp(Item item)
      {
          var index = MyCollection.IndexOf(item);
          return index &gt; 0;
      }
  
      public void MoveUp(Item item)
      {
          var index = MyCollection.IndexOf(item);
          if (index &gt; 0)
          {
              MyCollection.Remove(item);
              MyCollection.Insert(index - 1, item);
          }
      }           
  
  
      public bool CanMoveDown(Item item)
      {
          var index = MyCollection.IndexOf(item);
          return index &gt; -1 &amp;&amp; index &lt; class1.Count - 1;
      }
  
      public void MoveDown(Item item)
      {
          var index = MyCollection.IndexOf(item);
          if (index &gt; -1 &amp;&amp; index &lt; class1.Count - 1)
          {
              MyCollection.Remove(item);
              MyCollection.Insert(index + 1, item);
          }
      }
  </code></pre>
  
  <p>The first item's up button is initially disabled.  When I move down the first item, the 2nd item becomes the first item, but its up button is not automatically disabled.  How do I force reevaluation of the CanMoveUp guard method?</p>