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 и всё стало нормально.
Спасибо всем большое за помощь!