using Serein.Library; using Serein.Library.Utils; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Serein.NodeFlow { /// /// 节点类型 /// public class NodeMVVM { /// /// 节点类型 /// public required NodeControlType NodeType { get; set; } /// /// 节点Model类型 /// public required Type ModelType { get; set; } /// /// 节点视图控件类型 /// public Type? ControlType { get; set; } /// /// 节点视图VM类型 /// public Type? ViewModelType { get; set; } public override string ToString() { return $"$[{NodeType}]类型信息 : ModelType->{ModelType};ControlType->{ControlType};ViewModelType->{ViewModelType}"; } } /// /// 节点 数据、视图、VM 管理 /// public static class NodeMVVMManagement { /// /// 节点对应的控件类型 /// private static ConcurrentDictionary FlowNodeTypes { get; } = []; /// /// 注册 Model 类型 /// /// /// public static bool RegisterModel(NodeControlType type, Type modelType) { if(FlowNodeTypes.TryGetValue(type,out var nodeMVVM)) { SereinEnv.WriteLine(InfoType.WARN, $"无法为节点[{type}]注册Model类型[{modelType}],已经注册的类型为{nodeMVVM}。"); return false; } nodeMVVM = new NodeMVVM { NodeType = type, ModelType = modelType }; return FlowNodeTypes.TryAdd(type, nodeMVVM); } /// /// 注册 UI 类型 /// /// /// /// public static bool RegisterUI(NodeControlType type, Type controlType,Type viewModelType) { if (!FlowNodeTypes.TryGetValue(type, out var nodeMVVM)) { SereinEnv.WriteLine(InfoType.WARN, $"无法为节点[{type}]注册UI类型[{controlType}][{viewModelType}],当前类型尚未注册。"); return false; } nodeMVVM.ControlType = controlType; nodeMVVM.ViewModelType = viewModelType; return true; } /// /// 获取相应的类型 /// /// /// /// public static bool TryGetType(NodeControlType type, out NodeMVVM nodeMVVM) { if( FlowNodeTypes.TryGetValue(type, out nodeMVVM)) { return nodeMVVM != null; } else { return false; } } } }