[]
默认情况下,如果一个属性的类型是对象类型,这个类型又包含了一些子属性,那么可以通过标注ObjectPropertyAttribute,使得活字格设计器可以通过弹出二级对话框来编辑该属性。
注意,ObjType属性里声明的类型必须与属性类型一致。
自定义对象的类型应该从 ObjectPropertyBase 类派生,以确保在单元格复制的时候,子属性可以被正确的深克隆(ObjectPropertyBase实现了默认的深克隆逻辑)。
public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
{
[ObjectProperty(ObjType = typeof(MyObj))]
public MyObj MyProperty { get; set; }
public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
{
return new ExecuteResult();
}
public override CommandScope GetCommandScope()
{
return CommandScope.ExecutableInServer;
}
}
public class MyObj : ObjectPropertyBase
{
public string Name { get; set; }
public string Description { get; set; }
}
在设计器中效果如下:
对象的子属性也可以通过标注来控制属性编辑控件。
下面例子中,额外声明了一个属性使用公式编辑器。具体标注的用法请参考之前的章节。
public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
{
[ObjectProperty(ObjType = typeof(MyObj))]
public MyObj MyProperty { get; set; }
public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
{
return new ExecuteResult();
}
public override CommandScope GetCommandScope()
{
return CommandScope.ExecutableInServer;
}
}
public class MyObj : ObjectPropertyBase
{
public string Name { get; set; }
public string Description { get; set; }
[FormulaProperty]
public object FormulaProperty { get; set; }
}
在设计器中效果如下: