如何在Visual Studio DSL(特定于域的语言)工具中为装饰器添加显示名称?

时间:2020-03-05 18:55:49  来源:igfitidea点击:

在我的DSL项目中,我有一个带有许多装饰器的形状,这些装饰器链接到我的域类上的属性。但是,即使ieach装饰器具有DisplayName属性(设置为有意义的值),它也不会出现在生成的DSL项目中。 (我没有要求使用重新生成t4文件。)

我是否必须为每个仅具有显示名称作为我希望显示的值的属性创建另一个装饰器,或者我现在无法确定其他某种方式?

解决方案

回答

我以装饰器的显示名称作为假设,表示我们希望生成的DSL中的元素显示为" Example = a_value",其中a_value是实际值,Example是属性名称。

过去我所做的是创建第二个属性" ExampleDisplay",该属性不可浏览,实际上是装饰器指向的。然后,将ExampleDisplay的Kind属性设置为" Calculated"。然后,我们需要提供工具箱尝试调用的方法以显示装饰器,我们可以执行此装饰器的局部类。

partial class ExampleElement
{
    string GetExampleDisplayValue()
    {
        return "Example : " + this.Example;
    }
}

这不是理想的选择,因为我们没有在DSL图上设置属性的好方法,因此必须使用属性窗口。 (除非我们也挂接到基础属性的更新,否则属性窗口有时会滞后)。在GUI中进行实际的DSL工具包可以进行巧妙的编辑,但是我还没有找到方法。

也许值得询问VSX论坛是否还没有这样做。