public Result Execute(
            ExternalCommandData commandData, 
            ref string message, 
            ElementSet elements)
        {
            // Get application and document objects
            UIApplication uiApp = commandData.Application;
            Document doc = uiApp.ActiveUIDocument.Document;
            UIDocument uidoc = uiApp.ActiveUIDocument;

            try
            {
                IList<Reference> refs = null;
                LegendScheduleFilter selFilter = new LegendScheduleFilter(doc);

                Selection sel = uidoc.Selection;
                refs = sel.PickObjects(ObjectType.Element, selFilter, "Select Legends and/or Schedules only.");

                InputData inData = new InputData(doc, refs);
                LegendDuplicatorForm form = new LegendDuplicatorForm(inData);
                form.ShowDialog();

                return Result.Succeeded;
            }
            // Catch any exceptions and display them
            catch (Autodesk.Revit.Exceptions.OperationCanceledException)
            {
                return Result.Cancelled;
            }
            catch (Exception ex)
            {
                message = ex.Message;
                return Result.Failed;
            }
        }
        public LegendDuplicatorForm(InputData inputData)
        {
            this.inputData = inputData;

            InitializeComponent();

            // populate data grid view with sheets
            SortableBindingList<SheetWrapper> sheetBindingList = new SortableBindingList<SheetWrapper>();
            foreach (SheetWrapper sw in inputData.Sheets)
            {
                sheetBindingList.Add(sw);
            }
            dgvSheets.AutoGenerateColumns = false;
            dgvSheets.DataSource = sheetBindingList;

        }