You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:运行时基于Form选择填充CheckList类型Activity属性

解决方案:CheckList类型属性的动态级联填充

因为IRuntimeSelectListProvider是框架专为Dropdown类型设计的扩展接口,CheckList类型并不兼容,所以需要换两种思路实现级联效果:

方案1:通过属性变更通知手动更新选项

利用INotifyPropertyChanged接口监听「Form」属性的变化,实时更新「FormStructure」的可选选项集合,让CheckList控件绑定到这个集合实现动态更新。

代码示例

public class YourTargetActivity : Activity, INotifyPropertyChanged
{
    private string _selectedForm;

    [DisplayName("Form")]
    public string Form
    {
        get => _selectedForm;
        set
        {
            _selectedForm = value;
            OnPropertyChanged(nameof(Form));
            // 触发FormStructure选项更新
            RefreshFormStructureOptions();
        }
    }

    [DisplayName("FormStructure")]
    [UIHint(ActivityInputUIHints.CheckList)]
    public List<string> SelectedFormStructures { get; set; } = new List<string>();

    // 供CheckList控件绑定的可选选项集合
    public List<string> AvailableFormStructures { get; set; } = new List<string>();

    private void RefreshFormStructureOptions()
    {
        // 根据选中的Form类型加载对应结构选项
        AvailableFormStructures = Form switch
        {
            "UserRegistration" => new List<string> { "用户名", "邮箱", "手机号" },
            "OrderSubmission" => new List<string> { "订单ID", "商品名称", "数量" },
            _ => new List<string>()
        };
        OnPropertyChanged(nameof(AvailableFormStructures));
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

使用时只需让CheckList控件的可选项数据源绑定到AvailableFormStructures,**选中项绑定到SelectedFormStructures**即可。

方案2:实现自定义CheckList属性编辑器

如果你的框架支持自定义属性编辑器,可以实现IActivityPropertyEditor接口,直接在编辑器层监听「Form」属性变化,动态拉取选项。

代码示例

1. 自定义编辑器实现

public class DynamicCheckListEditor : IActivityPropertyEditor
{
    public FrameworkElement CreateEditor(ActivityPropertyDescriptor propertyDescriptor)
    {
        var checkListBox = new CheckListBox(); // 对应框架的CheckList控件
        var targetActivity = propertyDescriptor.OwnerActivity as YourTargetActivity;

        if (targetActivity != null)
        {
            // 绑定数据源和选中项
            checkListBox.ItemsSource = targetActivity.AvailableFormStructures;
            checkListBox.SelectedItems = targetActivity.SelectedFormStructures;

            // 监听Form属性变化,实时更新选项
            targetActivity.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == nameof(YourTargetActivity.Form))
                {
                    checkListBox.ItemsSource = targetActivity.AvailableFormStructures;
                }
            };
        }

        return checkListBox;
    }
}

2. 注册编辑器并标记属性

// 在框架初始化时注册自定义编辑器
ActivityPropertyEditorRegistry.RegisterEditor("DynamicCheckList", typeof(DynamicCheckListEditor));

// 修改FormStructure属性的UIHint
[DisplayName("FormStructure")]
[UIHint("DynamicCheckList")]
public List<string> SelectedFormStructures { get; set; } = new List<string>();

内容的提问来源于stack exchange,提问作者Maruful Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:43:23