using Serein.Library; using Serein.Library.Api; using Serein.NodeFlow.Model; using Serein.Workbench.Node.ViewModel; using System.Windows; using System.Windows.Controls; namespace Serein.Workbench.Node.View { /// /// FlowCallNodeControl.xaml 的交互逻辑 /// public partial class FlowCallNodeControl : NodeControlBase, INodeJunction { private new FlowCallNodeControlViewModel ViewModel { get; set; } public FlowCallNodeControl() { var env = App.GetService(); base.ViewModel = new FlowCallNodeControlViewModel(new SingleFlowCallNode(env)); base.ViewModel.IsEnabledOnView = false; DataContext = base.ViewModel; InitializeComponent(); } public FlowCallNodeControl(FlowCallNodeControlViewModel viewModel) : base(viewModel) { DataContext = viewModel; ViewModel = viewModel; InitializeComponent(); ViewModel.UploadMethodDetailsControl = UploadMethodDetailsControl; } private void UploadMethodDetailsControl(MethodDetails methodDetails) { //MethodDetailsControl.MethodDetails = methodDetails; } /// /// 入参控制点(可能有,可能没) /// JunctionControlBase INodeJunction.ExecuteJunction => this.ExecuteJunctionControl; /// /// 下一个调用方法控制点(可能有,可能没) /// JunctionControlBase INodeJunction.NextStepJunction => throw new NotImplementedException("不存在下一个调用控制点"); /// /// 返回值控制点(可能有,可能没) /// JunctionControlBase INodeJunction.ReturnDataJunction => throw new NotImplementedException("不存在返回值控制点"); /// /// 方法入参控制点(可能有,可能没) /// JunctionControlBase[] INodeJunction.ArgDataJunction => GetArgJunction(); private JunctionControlBase[] GetArgJunction() { // 获取 MethodDetailsControl 实例 //var methodDetailsControl = ViewModel.NodeModel.IsShareParam ? this.SelectMethodDetailsControl : this.MyMethodDetailsControl; var methodDetailsControl = this.MethodDetailsControl; var itemsControl = FindVisualChild(methodDetailsControl); // 查找 ItemsControl if (itemsControl != null) { var argDataJunction = new JunctionControlBase[base.ViewModel.NodeModel.MethodDetails.ParameterDetailss.Length]; var controls = new List(); for (int i = 0; i < itemsControl.Items.Count; i++) { var container = itemsControl.ItemContainerGenerator.ContainerFromIndex(i) as FrameworkElement; if (container != null) { var argControl = FindVisualChild(container); if (argControl != null) { controls.Add(argControl); // 收集 ArgJunctionControl 实例 } } } return argDataJunction = controls.ToArray(); } return []; } } }