То есть суть сводится к тому, что по нажатию кнопки на форме WPF, я хочу открыть другую форму WPF, но не напрямую, а через запуск команды в классе!Евгений, вам это нужно только для того, чтобы знать как это делается или действительно есть практическая цель сего действия?
Если знаете ее GUID, то можно так:ИМХО, имеет смысл, только если это чья то чужая команда. Если ваша команда и есть ее исходники, то так делать не стоит.
Евгений, вам это нужно только для того, чтобы знать как это делается или действительно есть практическая цель сего действия?
ИМХО, имеет смысл, только если это чья то чужая команда. Если ваша команда и есть ее исходники, то так делать не стоит.
По нажатию на кнопку формы нужно вызывать методы нужного класса, а не пытаться выполнить команду.
Вызвать метод нужного класса пробовал, на что получил от Ревита сообщение:Так нужно в этом и разбираться, а не пытаться найти странное решение, путем
по нажатию кнопки запустилась команда, которую я создал в классе:)
код был таким:Без знания того, что содержится в методе Make_It сказать ничего нельзя. Также не ясно, как у вас открывается форма MainWindow. Возможно там тоже проблемы
что я сделал не такПока что у вас неверный подход в принципе. Мой вывод, что вторая команда вам не нужна. Если нужна, то все что вам нужно делать в этой команде, вынесите в отдельный класс. Работайте с этим классом как при вызове команды, так и при нажатии кнопки на форме.
myNewForm.Show()Евгений, не делайте так.. Я уже говорил об этом.
Евгений, не делайте так.. Я уже говорил об этом.
Мой вывод, что вторая команда вам не нужна. Если нужна, то все что вам нужно делать в этой команде, вынесите в отдельный класс. Работайте с этим классом как при вызове команды, так и при нажатии кнопки на форме.мне тогда потребуется продублировать все команды, но запихнуть их в отдельные классы, с которыми и надо будет работать? Правильно понимаю?
В таком случае, зачем вам вообще нужна вторая команда?
Итак, чтобы не быть не понятымТогда и поясните сразу, что вы понимаете под командой?:) а то может у нас разные понятия:)
Оберните вызов метода в try..catch увидите в чем ошибка. Возможно это из за того, что форма создана, но не отображена.
Тогда и поясните сразу, что вы понимаете под командой? а то может у нас разные понятия:)Ну, если языком пятиклассника, то звучит это так:
[TransactionAttribute(TransactionMode.Manual)]
Команда - эта такая штуковина, которая выполняется (запускается) с помощью функции Execute и имеет свой уникальный guid.Вот это и пытался уточнить. Это всего лишь возможность выполнить код из интерфейса Revit. Команда одна - возов формы. После этого команды не нужны. Идет простой обмен свойствами и вызов функций того или иного класса встроенными средствами фактически любого высокоуровнего языка программирования - с помощью конструктора или свойств класса.
С чего вы взяли что RevitLookup использует команды для каждой кнопки?
Вот это и пытался уточнить. Это всего лишь возможность выполнить код из интерфейса Revit. Команда одна - возов формы. После этого команды не нужны. Идет простой обмен свойствами и вызов функций того или иного класса встроенными средствами фактически любого высокоуровнего языка программирования - с помощью конструктора или свойств класса.
Как отметить решение, если ответа ДВА?Почему то ожидал, что вы просто пометите ответ Антона, как верный:)
Надо предложить Александру Наумовичу идею о том, чтобы можно было пометить не только правильный ответ, но и сопутствующие ответы, которые явно указывают на решение или являются его дополнением :)Мод форума не позволяет это сделать, так что идея не проходит. Остаётся только плюсовать "сопутствующие ответы".
Мод форума не позволяет это сделать, так что идея не проходит. Остаётся только плюсовать "сопутствующие ответы".
запустить форму как win.ShowDialog().Правы на 100%, большое спасибо за решение!
Скорее всего это запуск транзакции не из API контекстаМетод ShowDialog() действительно работает, но хотелось бы после загрузки семейства размещать его в проекте методом PromptForFamilyInstancePlacement() и при этом не закрывать форму каждый раз. Поэтому окно должно вызываться методом Show(), но тут Вы правы, запуск транзакции осуществляется не из API контекста. Выход предложил Jeremy Tammik в событии Idling, приведу даже код с SDK:
Поэтому окно должно вызываться методом Show()
Давайте попробуем разобраться, для чего Вам нужно использовать метод Show()? Вы хотите иметь возможность сворачивать WPF форму/окно и дальше работать в Revit-e?Вы все верно поняли
А получится ли у Вас загрузить семейство, и не закрывая формы (только свернуть) разместить в проекте
Вы использовали метод IdIing в примере?
Вручную? Или автоматически? Я попробую, но не гарантирую, что успею сегодня это сделать.Без разницы: можете автоматически, можете вручную попробовать через метод PromptForFamilyInstancePlacement(FamilySymbol)
Здесь вы можете создавать свои события, в которых можно запускать транзакцию. Таким образом неважно открыто или закрыто ваше окно.А можно пример кода, спроецированный на мою задачу, если у Вас есть немного времени, конечно? Буду чрезмерно благодарен
я бы реализовал IExternalEventHandlerСпасибо за подсказку, все получилось как задумывалось. Делюсь решением (Евгению отдельно спасибо за попытку). Код в команде:
Я пытаюсь понять суть задачи (отметьте верно/неверно по каждому вопросу):1. Вам нужно открывать WPF форму по нажатию кнопки на ленте?2. Вам нужно, чтобы внутри WPF формы была кнопка, отвечающая за открытие определённого семейства (или любое другое действие)?3. Вы хотите открывать другие семейства не закрывая WPF форму?4. Вы хотите, чтобы WPF форма могла быть немодальной?Пойму - помогу.Приветствую, Евгений и всех кто в теме. А мне не поможете?
По созданию плагина под Revit с помощью WPF алгоритм будет следующим:Евгений, огромное спасибо за столь быстрый и подробный ответ!
Результат Вам должен понравиться.Наконец-то, появилось время... Все получилось. Спасибо еще раз!