title: Save selected items when using caliburn.micro /Telerik RadGridView /Silverlight
body: <p>I am using Caliburn micro(1.3)/MVVM and Silverlight. When I update the itemsource RadGridView, I lose the selected items. I found a blog about implementing a behavior to save the selected items when you are implementing MVVM. I can get the selected items, but I cannot set them back once the itemsource is refreshed. Can someoneshow me how to implement this using caliburn.micro and the RadGridVIew? I think the best way to go is to create a caliburn micro convention, but I can only find a reference for creating a convention for selectedItem, not selectedItems.</p>
  
  <p>Can someone show me how to accomplish this? I tried the following, but it does not work.</p>
  
  <pre><code>  private static void SetRadGridSelecteditemsConventions()
      {
          ConventionManager
              .AddElementConvention&lt;DataControl&gt;(DataControl.ItemsSourceProperty, "SelectedItem", "SelectionChanged")
              .ApplyBinding = (viewModelType, path, property, element, convention) =&gt;
                                  {
                                      ConventionManager.SetBinding(viewModelType, path, property, element, convention, DataControl.ItemsSourceProperty);
  
                                      if (ConventionManager.HasBinding(element, DataControl.SelectedItemProperty))
                                          return true;
  
                                      var index = path.LastIndexOf('.');
                                      index = index == -1 ? 0 : index + 1;
                                      var baseName = path.Substring(index);
                                      foreach (var selectionPath in
                                          from potentialName in ConventionManager.DerivePotentialSelectionNames(baseName)
                                          where viewModelType.GetProperty(potentialName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance) != null
                                          select path.Replace(baseName, potentialName))
                                      {
                                          var binding = new Binding(selectionPath) { Mode = BindingMode.TwoWay };
                                          BindingOperations.SetBinding(element, DataControl.SelectedItemProperty, binding);
                                      }
                                      return true;
                                  };
      }
  </code></pre>
  
  <p>Thanks,
  Stephane</p>