GetModuleList与 EventMgr.Ins.GetEvent<OpenVarLinkViewEvent>().Publish

GetModuleList与 EventMgr.Ins.GetEvent<OpenVarLinkViewEvent>().Publish CommonMethods.GetModuleList与 EventMgr.Ins.GetEvent().Publish的作用Now I have all the context needed. Here’s the detailed analysis:代码上下文这两行代码位于 ShowImageViewModel.cs 的LinkCommand命令中当用户在UI上点击图像索引(nImageIndex)的链接按钮时触发。第一行CommonMethods.GetModuleList(ModuleParam, VarLinkViewModel.Ins.Modules, int);作用填充变量链接对话框的可选变量列表。这个方法定义在 CommonMethods.cs做了以下事情根据当前模块定位通过ModuleParam.ProjectID找到所属项目再通过ModuleParam.ModuleName找到当前模块在流程中的索引位置。向前收集变量避免循环依赖只遍历索引在当前模块之前的模块for (int i 0; i index; i)从每个模块的OutputMap中提取输出变量。这确保只能引用上游模块的输出防止循环引用。按类型过滤第三个参数int指定了数据类型过滤器。方法内部会Split(,)处理因此支持多类型如int,double。对于nImageIndex链接只收集DataType int的变量。添加全局变量Solution.Ins.SysVar中类型为int的系统变量也会被加入。全局变量排在列表最前面ModuleNo 0。填充目标集合最终将结果写入VarLinkViewModel.Ins.Modules一个ObservableCollectionModuleList每个模块条目包含该模块下所有匹配类型的输出变量列表。屏蔽控制流模块会排除名称以否则和结束非特殊结束开头的纯控制流模块。第二行EventMgr.Ins.GetEventOpenVarLinkViewEvent().Publish(${ModuleGuid},nImageIndex);作用发布事件打开变量链接选择窗口。调用链如下获取事件实例EventMgr.Ins.GetEventOpenVarLinkViewEvent()从事件聚合器中获取或创建OpenVarLinkViewEvent单例。这是一个PubSubEventstring即发布/订阅模式的事件承载string类型的负载数据。发布事件.Publish(${ModuleGuid},nImageIndex)将当前模块的 GUID 和链接目标名nImageIndex拼接成字符串发布出去。例如a1b2c3d4-...,nImageIndex。订阅方处理在 VarLinkViewModel.cs 中构造函数里订阅了这个事件EventMgr.Ins.GetEventOpenVarLinkViewEvent().Subscribe(OnOpenVarLinkViewEvent);回调OnOpenVarLinkViewEvent(string sendName)做的事将sendName即{ModuleGuid},nImageIndex存入VarChangedEventParam.SendName后续回调用这个字段来匹配是哪个字段发起的链接。解析是否有第三个参数如IsAdd来决定是新增还是编辑模式。调用VarLinkView.Ins.ShowDialog()弹出变量链接对话框。用户确认后回调用户在对话框中选好变量点确认后ConfirmCommand会发布VarChangedEvent然后ShowImageViewModel中的OnVarChanged方法根据SendName.Split(,)[1]匹配到nImageIndex执行casenImageIndex:nImageIndex.Textobj.LinkName;break;从而完成变量绑定。整体流程总结用户点击链接按钮 → LinkCommand 触发 → GetModuleList 收集上游 int 类型变量 → 填充 VarLinkViewModel.Ins.Modules → Publish({ModuleGuid},nImageIndex) → 弹出变量选择对话框 → 用户选择变量并确认 → VarChangedEvent 发布 → OnVarChanged 匹配 nImageIndex → nImageIndex.Text 某模块.某变量 → 完成链接两行代码协作完成了一个典型的打开选择器→用户选择→回调绑定的变量链接流程其中第一行负责准备数据源第二行负责触发UI交互。