优化ui绑定侧逻辑
This commit is contained in:
@@ -45,21 +45,75 @@ namespace XericUI.ReflectionUIGenerator
|
||||
/// <summary>数据侧写入的缓存值</summary>
|
||||
public object DataCachedValue { get; set; }
|
||||
|
||||
// ============ 验证状态 ============
|
||||
|
||||
private ValidationState _validationState = ValidationState.Normal;
|
||||
|
||||
/// <summary>当前验证状态</summary>
|
||||
public ValidationState CurrentValidationState => _validationState;
|
||||
|
||||
/// <summary>验证状态变更事件 — UI 组件订阅以切换样式</summary>
|
||||
public event Action<ValidationState> OnValidationStateChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 校验值是否满足元数据约束
|
||||
/// 返回:Normal(通过)、Warning(放行但警告)、Invalid(驳回)
|
||||
/// </summary>
|
||||
public ValidationState ValidateValue(object value)
|
||||
{
|
||||
if (MetaData == null) return ValidationState.Normal;
|
||||
|
||||
// 1. 空值检查(Required)
|
||||
if (MetaData.Required && (value == null || (value is string s && string.IsNullOrEmpty(s))))
|
||||
return ValidationState.Invalid;
|
||||
|
||||
// 2. 范围检查(RangeMin/RangeMax)
|
||||
if (value is IConvertible)
|
||||
{
|
||||
float num = Convert.ToSingle(value);
|
||||
|
||||
if (MetaData.RangeMin.HasValue && num < MetaData.RangeMin.Value)
|
||||
return ValidationState.Invalid;
|
||||
|
||||
if (MetaData.RangeMax.HasValue && num > MetaData.RangeMax.Value)
|
||||
return ValidationState.Invalid;
|
||||
}
|
||||
|
||||
return ValidationState.Normal;
|
||||
}
|
||||
|
||||
/// <summary>更新验证状态并触发回调(仅状态变化时触发)</summary>
|
||||
internal void SetValidationState(ValidationState newState)
|
||||
{
|
||||
if (_validationState != newState)
|
||||
{
|
||||
_validationState = newState;
|
||||
OnValidationStateChanged?.Invoke(_validationState);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>重置验证状态为 Normal(不触发事件)</summary>
|
||||
internal void ResetValidationState()
|
||||
{
|
||||
_validationState = ValidationState.Normal;
|
||||
}
|
||||
|
||||
// ============ UI 绑定 ============
|
||||
|
||||
/// <summary>UI 值变更回调委托 — UI 组件订阅此回调以更新显示</summary>
|
||||
public Action<object> OnUIDataChanged;
|
||||
/// <summary>UI 值变更回调委托 — UI 组件订阅此回调以更新显示(附带验证状态)</summary>
|
||||
public Action<object, ValidationState> OnUIDataChanged;
|
||||
|
||||
/// <summary>通知 UI 更新值</summary>
|
||||
public void NotifyUIUpdate(object value)
|
||||
/// <summary>通知 UI 更新值(带验证状态)</summary>
|
||||
public void NotifyUIUpdate(object value, ValidationState state)
|
||||
{
|
||||
OnUIDataChanged?.Invoke(value);
|
||||
OnUIDataChanged?.Invoke(value, state);
|
||||
}
|
||||
|
||||
/// <summary>清除所有 UI 变更订阅</summary>
|
||||
public void ClearUIEvent()
|
||||
{
|
||||
OnUIDataChanged = null;
|
||||
OnValidationStateChanged = null;
|
||||
}
|
||||
|
||||
// ============ 便捷方法 ============
|
||||
|
||||
Reference in New Issue
Block a user