using System; using System.Collections.Generic; using System.Reflection; namespace XericUI.ReflectionUIGenerator { /// /// 单个成员的元数据数据结构 /// 记录从反射 + Attribute 标记中提取的所有信息 /// public class AvrgMemberMetaData { // ============ 反射信息 ============ /// 字段/属性名 public string MemberName { get; set; } /// 反射信息 (FieldInfo 或 PropertyInfo) public MemberInfo MemberInfo { get; set; } /// 值类型 public Type ValueType { get; set; } /// 是否为属性 (false 为字段) public bool IsProperty { get; set; } /// 绑定的目标实例 (可选,Step1 时可空) public object TargetInstance { get; set; } // ============ 拆分属性支持 ============ /// /// 子属性路径(仅拆分属性有效) /// 用于从父值中访问子字段/属性,如 "x"、"y"、"width" /// public string PropertyPath { get; set; } /// /// 拆分子元数据列表 /// 由 [XuiavrgSplit] 特性填充,每个子元数据对应一个拆分属性 /// public List SubMetaDataList { get; set; } // ============ 从 IXuiavrgAttribute 融合的元数据 ============ /// 显示标签 public string LabelName { get; set; } /// 单位文本 public string UnitLabelName { get; set; } /// 格式化字符串(如 "{0:F2}") public string FormatText { get; set; } /// 功能标记 public XuiavrgFieldTag Tag { get; set; } = XuiavrgFieldTag.None; /// 标记索引 (同 Tag 多实例时区分) public int TagIndex { get; set; } /// 排序值 (越小越靠前) public int FieldOrder { get; set; } /// 编组路径 (以 "/" 分割层级) public string GroupPath { get; set; } /// 是否在 UI 中隐藏 public bool Hide { get; set; } /// 值变更时触发的反射调用方法名 public string OnTriggerCall { get; set; } /// /// 类的初始默认值(由类字段初始化器决定) /// 例如 public float speed = 10f; → DefaultValue = 10f /// public object DefaultValue { get; set; } // ============ 属性检查 (由 [PropertyCheck] 填充) ============ /// /// 判断依据标识 /// 默认使用 ValueType.FullName 与 AvrgValueRangeConfig 中的条目匹配 /// public string PropertyCheckKey { get; set; } /// 是否必填 public bool Required { get; set; } /// 是否不可为空 public bool NotEmpty { get; set; } /// 是否启用合理值范围检查 public bool ValidateReasonable { get; set; } /// 是否启用警告状态检查 public bool ValidateWarning { get; set; } /// 是否启用无效值状态检查 public bool ValidateInvalid { get; set; } // ============ 原始 Attribute 引用 ============ /// /// 收集到的所有 IXuiavrgAttribute 列表 /// 保留原始引用,供扩展和自定义处理使用 /// public List Attributes { get; set; } = new List(); /// /// 从绑定目标获取值 /// public object GetValue() { if (TargetInstance == null) return null; switch (MemberInfo) { case PropertyInfo pi: return pi.GetValue(TargetInstance); case FieldInfo fi: return fi.GetValue(TargetInstance); default: return null; } } /// /// 设置值到绑定目标 /// public void SetValue(object value) { if (TargetInstance == null) return; switch (MemberInfo) { case PropertyInfo pi: if (pi.CanWrite) pi.SetValue(TargetInstance, value); break; case FieldInfo fi: fi.SetValue(TargetInstance, value); break; } } } }