[]
在设计器中,如果一个属性的值希望在另一个属性值变化时自动随之变化,可以通过在XXXDesigner.cs 类中重写 OnPropertyEditorChanged 方法来实现。
下面例子中假设命令上有两个属性,分别是MyProperty1和MyProperty2,实现的联动效果为 MyProperty1 的值为 true 时, 修改 MyProperty2 值为真, 否则,修改MyProperty2 值为假。
在 MyPluginServerCommand.cs 修改代码如下:
using GrapeCity.Forguncy.Commands;
using System.ComponentModel;
using System.Threading.Tasks;
namespace MyPlugin
{
[Designer("MyPlugin.Designer.MyPluginServerCommandDesigner, MyPlugin")]
public class MyPluginServerCommand : Command, ICommandExecutableInServerSideAsync
{
public bool MyProperty1 { get; set; }
public string MyProperty2 { get; set; }
public async Task<ExecuteResult> ExecuteAsync(IServerCommandExecuteContext dataContext)
{
return new ExecuteResult();
}
public override CommandScope GetCommandScope()
{
return CommandScope.ExecutableInServer;
}
}
}
在 MyPluginServerCommandDesigner.cs 修改代码如下:
using GrapeCity.Forguncy.Commands;
using GrapeCity.Forguncy.Plugin;
using System;
using System.Collections.Generic;
namespace MyPlugin.Designer
{
public class MyPluginServerCommandDesigner : CommandDesigner<MyPluginServerCommand>
{
public override void OnPropertyEditorChanged(string propertyName, object propertyValue, Dictionary<string, IEditorSettingsDataContext> properties)
{
if (propertyName == nameof(MyPluginCellType.MyProperty1))
{
var property2Setting = properties[nameof(MyPluginCellType.MyProperty2)];
if (object.Equals(propertyValue, true))
{
property2Setting.Value = "真";
}
else
{
property2Setting.Value = "假";
}
}
base.OnPropertyEditorChanged(propertyName, propertyValue, properties);
}
}
}
代码说明:
OnPropertyEditorChanged 函数会在命令的任何属性被修改时被调用。可以通过参数 propertyName 判断当前被修改的属性名, 通过参数 propertyValue 获取最新被修改的值。properties 属性中包含了全部属性列。可以通过操作 properties 里的特定属性实现联动效果。
设计器中的效果: