1

一旦选择了一个类别,我们点击按钮,类别的名称“进入”这个名为“selected”的变量。现在,如何将包含必要类别的变量放入 ElementCategoryFilter 中?所选类别

public void Button_Click(object sender, RoutedEventArgs e)
    {
        string selected = AllTheCategories.SelectedItem.ToString();
    }

    ElementCategoryFilter filter = new ElementCategoryFilter();
4

3 回答 3

0

ElementCategoryFilter 有 4 个构造函数

ElementCategoryFilter(BuiltInCategory category)

ElementCategoryFilter(ElementId CategoryId)

和另外 2 个构造函数,它们采用相同的参数加上一个额外的布尔值来反转过滤器。在这里您可以找到它的文档 [参考链接]:https ://www.revitapidocs.com/2019/41234622-8696-4b43-5ffa-3d92567f8318.htm

于 2021-06-14T09:07:28.010 回答
0

如果在将 AllTheCategories.SelectedItem 转换为字符串之前,它的类型是 Autodesk.Revit.DB.Category,那么您应该像这样使用它。

ElementCategoryFilter filter = new ElementCategoryFilter();

public void Button_Click(object sender, RoutedEventArgs e)
{
    // selected type should be Category
    var selected = AllTheCategories.SelectedItem;
    filter = new ElementCategoryFilter(selected.Id);
    
}

如果不是,那么我猜您正在访问 ComboBox.SelectedItem 属性,这是一种错误的方法,您应该检查 MVVM 模式和数据绑定。

但是,还有另一种获取类别 ID 的方法是通过 BuiltInCategory 枚举和 Document

像这样

Document doc =  /* some code to get document */;
ElementId categoryId = 
doc.Settings.Categories.get_Item(BuiltInCategory.OST_DuctAccessory /* or any category you want */).Id;
ElementCategoryFilter collector = new ElementCategoryFilter(categoryId);
于 2021-07-14T17:13:00.510 回答
0

您可以在Button_Click事件中直接将所选字符串分配给 ElementCategoryFilter 。

ElementCategoryFilter filter = new ElementCategoryFilter();

public void Button_Click(object sender, RoutedEventArgs e)
    {
        string selected = AllTheCategories.SelectedItem.ToString();
        filter = new ElementCategoryFilter(selected);
    }


    
于 2021-04-28T20:46:37.133 回答