【发布时间】:2021-05-31 03:29:05
【问题描述】:
在直接讨论问题之前,我将简要介绍一下我要编写的代码。基本上,我正在尝试做一个 Revit 加载项,它打开一个 WPF 对话框,显示活动视图中元素的id 和categoryName,当双击包含id 的单元格时,对话框关闭并选择带有id 的元素。
双击后出现问题。因为Execute() 命令在显示对话框后结束,所以我不再能够执行Selection。
Command.cs
[Transaction(TransactionMode.Manual)]
public class Command : IExternalCommand
{
static List<Element> elemList = new List<Element>();
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Application app = uiapp.Application;
Document doc = uidoc.Document;
//List<Element> elemList = new List<Element>();
FilteredElementCollector allElementsInView = new FilteredElementCollector(doc, doc.ActiveView.Id);
IList elementsInView = (IList)allElementsInView.ToElements();
foreach (Element elem in elementsInView)
{
elemList.Add(elem);
}
OpenDialog();
return Result.Succeeded;
}
public static void SelectElementById(ElementId id)
{
}
public static List<Element> SendElements()
{
return elemList;
}
public void OpenDialog()
{
ElementListDialog dialog = new ElementListDialog();
dialog.Show();
}
}
}
正如您在上面看到的,我还有一个从 ElementListDialog.xaml.cs 类调用的 SelectElementById(...) 方法。下面您将看到填充DataGrid 和MouseButtonDoubleClick 方法的功能,该方法获取单元格的值并将ElementId 类型的id 传递回Command.cs
ElementListDialog.xaml.cs
private List<Element> elemList;
public ElementListDialog()
{
InitializeComponent();
Lab8.Command.SendElements();
elemList = Lab8.Command.SendElements();
//elemList = _elemList;
Content content = new Content();
foreach (var elem in elemList)
{
content = new Content();
content.id = elem.Id;
content.categName = elem.Category.Name;
var finalList = new Content
{
id = content.id,
categName = content.categName
};
ElementDataGrid.Items.Add(finalList);
}
}
private void ElementDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var grid = sender as DataGrid;
var cellValue = grid.SelectedValue;
Content content = new Content();
content = (Content)cellValue;
Command.SelectElementById(content.id);
}
因此;我应该如何设计SelectElementById 方法,以便能够通过id 选择某个元素?还是当前代码不允许执行此操作?
【问题讨论】: