Revit 17.0.501.0, 20160720_1515(x64), Service Pack 2
Итак, вроде заработало. Не всё, но дальше уже можно разбираться. Я решил упростить код максимально, чтобы он удалял только один конкретный параметр "TestParam". Вот код:
- public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 
- { 
-     UIApplication uiapp = commandData.Application; 
-     UIDocument uidoc = uiapp.ActiveUIDocument; 
-   
-     doc = uidoc.Document; 
-   
-     var bindingMap = doc.ParameterBindings; 
-   
-     DefinitionBindingMapIterator it 
-       = bindingMap.ForwardIterator(); 
-   
-     while (it.MoveNext()) 
-     { 
-         Definition def = it.Key; 
-   
-         if (def.Name.Equals("TestParam")) 
-         { 
-             //Запускаем транзакцию 
-             try 
-             { 
-                 using (var t = new Transaction(doc, "Удаляем параметр")) 
-                 { 
-                     t.Start(); 
-                     bool Result = bindingMap.Remove(def); 
-                     t.Commit(); 
-                     TaskDialog.Show("Удаление параметра", Result ? "Удалён" : "Не удалён"); 
-                     break; 
-                 } 
-             } 
-             catch (Exception exp) 
-             { Log.Write(exp); } 
-   
-         } 
-     } 
-   
-     return Result.Succeeded; 
- }//Execute 
Я запустил его и Revit Lookup больше мне этот параметр не показывает.
Правда, в процессе отладки у меня внезапно случился крах: FatalExecutionEngineError, который никак не обрабатывался. Но после обновления до 17.0.1099.0
20161117_1200(x64) 2017.1.1 стало обрабатываться нормально, и причина ошибке была найдена: падал итератор после удаления связывания. Я добавил break и всё стало нормально.
Спасибо всем большое за помощь!