VmToolBlockEditView.xaml.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using Plugins.Vm.Models;
  5. using TeamAAS;
  6. using TeamAAS.FlowEditor.Plugins;
  7. using TeamAAS.FlowEngine;
  8. namespace Plugins.Vm.Views
  9. {
  10. /// <summary>
  11. /// VM 工具块节点编辑视图:主区承载海康 VM 自带的流程配置控件 VmProcedureConfigControl,
  12. /// 按“方案路径/流程名”加载方案并绑定,用户直接在 VM 原生界面里编辑流程。
  13. /// 遵循插件视图约定:DataContext 为 VmToolBlockModel(由宿主注入),实现 IPluginViewSave 回写。
  14. /// </summary>
  15. public partial class VmToolBlockEditView : UserControl, IPluginViewSave
  16. {
  17. public VmToolBlockEditView()
  18. {
  19. InitializeComponent();
  20. Loaded += OnLoaded;
  21. Unloaded += OnUnloaded;
  22. }
  23. private VmToolBlockModel Model => DataContext as VmToolBlockModel;
  24. private void OnLoaded(object sender, RoutedEventArgs e)
  25. {
  26. var model = Model;
  27. if (model == null) return;
  28. TxtTitle.Text = string.IsNullOrWhiteSpace(model.NodeName) ? "VM工具块" : model.NodeName;
  29. LoadAndBind();
  30. }
  31. /// <summary>加载 VM 方案(若未加载)并把流程绑定到配置控件。</summary>
  32. private void LoadAndBind()
  33. {
  34. var model = Model;
  35. if (model == null) return;
  36. try
  37. {
  38. if (model.Solution == null && !string.IsNullOrWhiteSpace(model.SolutionPath))
  39. model.Solution = VmRuntime.LoadSolution(model.SolutionPath);
  40. if (model.Solution != null && !string.IsNullOrWhiteSpace(model.ProcedureName))
  41. Config.BindSingleProcedure(model.ProcedureName);
  42. }
  43. catch (Exception ex)
  44. {
  45. DialogHelper.Error($"加载 VM 方案/流程失败:{ex.Message}");
  46. }
  47. }
  48. private void BtnLoad_Click(object sender, RoutedEventArgs e) => LoadAndBind();
  49. /// <summary>属性按钮:配置方案路径/流程名/输入映射/输出终端名(走通用属性网格)。</summary>
  50. private void BtnProperties_Click(object sender, RoutedEventArgs e)
  51. {
  52. var model = Model;
  53. if (model == null) return;
  54. PluginLoader.Instance.ParentGroupModel = model;
  55. try
  56. {
  57. if (DialogHelper.EditProperties(model, $"VM工具块属性 - {model.NodeName}"))
  58. {
  59. TxtTitle.Text = string.IsNullOrWhiteSpace(model.NodeName) ? "VM工具块" : model.NodeName;
  60. LoadAndBind();
  61. }
  62. }
  63. finally
  64. {
  65. PluginLoader.Instance.ParentGroupModel = null;
  66. }
  67. }
  68. private void OnUnloaded(object sender, RoutedEventArgs e)
  69. {
  70. //SaveChanges();
  71. PluginLoader.Instance.ParentGroupModel = null;
  72. }
  73. /// <summary>保存:VM 配置控件直接编辑已加载方案,这里把方案写回磁盘。</summary>
  74. public void SaveChanges()
  75. {
  76. try { VM.Core.VmSolution.Save(); } catch { /* 未加载方案时忽略 */ }
  77. }
  78. }
  79. }