From ca86e8f7e8665f4b4a55450345db05641a573a8e Mon Sep 17 00:00:00 2001 From: "zhengxuan.zhang" Date: Thu, 23 Apr 2026 18:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4CNC=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E9=A3=8E=E6=A0=BC=EF=BC=8C=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/Cnc/CncEditorViewModel.cs | 27 ++++++-- .../Cnc/CncProgramTreeRootViewModel.cs | 31 +++++++++ XplorePlane/Views/Cnc/CncPageView.xaml | 63 +++++++++++-------- 3 files changed, 90 insertions(+), 31 deletions(-) create mode 100644 XplorePlane/ViewModels/Cnc/CncProgramTreeRootViewModel.cs diff --git a/XplorePlane/ViewModels/Cnc/CncEditorViewModel.cs b/XplorePlane/ViewModels/Cnc/CncEditorViewModel.cs index b870f77..a38dbaa 100644 --- a/XplorePlane/ViewModels/Cnc/CncEditorViewModel.cs +++ b/XplorePlane/ViewModels/Cnc/CncEditorViewModel.cs @@ -30,10 +30,11 @@ namespace XplorePlane.ViewModels.Cnc private CncProgram _currentProgram; private ObservableCollection _nodes; private ObservableCollection _treeNodes; + private ObservableCollection _programTreeRoots; private CncNodeViewModel _selectedNode; private bool _isModified; private string _programName; - private string _programDisplayName = "NewCncProgram"; + private string _programDisplayName = "新建检测程序.xp"; private Guid? _preferredSelectedNodeId; public CncEditorViewModel( @@ -49,6 +50,10 @@ namespace XplorePlane.ViewModels.Cnc _nodes = new ObservableCollection(); _treeNodes = new ObservableCollection(); + _programTreeRoots = new ObservableCollection + { + new CncProgramTreeRootViewModel(_programDisplayName, _treeNodes) + }; InsertReferencePointCommand = new DelegateCommand(() => ExecuteInsertNode(CncNodeType.ReferencePoint)); InsertSaveNodeWithImageCommand = new DelegateCommand(() => ExecuteInsertNode(CncNodeType.SaveNodeWithImage)); @@ -85,6 +90,12 @@ namespace XplorePlane.ViewModels.Cnc private set => SetProperty(ref _treeNodes, value); } + public ObservableCollection ProgramTreeRoots + { + get => _programTreeRoots; + private set => SetProperty(ref _programTreeRoots, value); + } + public CncNodeViewModel SelectedNode { get => _selectedNode; @@ -114,7 +125,11 @@ namespace XplorePlane.ViewModels.Cnc public string ProgramDisplayName { get => _programDisplayName; - private set => SetProperty(ref _programDisplayName, value); + private set + { + if (SetProperty(ref _programDisplayName, value) && ProgramTreeRoots?.Count > 0) + ProgramTreeRoots[0].DisplayName = value; + } } public DelegateCommand InsertReferencePointCommand { get; } @@ -300,7 +315,7 @@ namespace XplorePlane.ViewModels.Cnc private void ExecuteNewProgram() { - var name = string.IsNullOrWhiteSpace(ProgramName) ? "NewCncProgram" : ProgramName; + const string name = "新建检测程序"; _currentProgram = _cncProgramService.CreateProgram(name); ProgramName = _currentProgram.Name; ProgramDisplayName = FormatProgramDisplayName(_currentProgram.Name); @@ -427,6 +442,10 @@ namespace XplorePlane.ViewModels.Cnc Nodes = new ObservableCollection(flatNodes); TreeNodes = new ObservableCollection(rootNodes); + ProgramTreeRoots = new ObservableCollection + { + new CncProgramTreeRootViewModel(ProgramDisplayName, TreeNodes) + }; SelectedNode = selectedId.HasValue ? Nodes.FirstOrDefault(node => node.Id == selectedId.Value) ?? Nodes.LastOrDefault() @@ -635,7 +654,7 @@ namespace XplorePlane.ViewModels.Cnc private static string FormatProgramDisplayName(string programName) { - var name = string.IsNullOrWhiteSpace(programName) ? "NewCncProgram" : programName; + var name = string.IsNullOrWhiteSpace(programName) ? "新建检测程序" : programName; return name.EndsWith(".xp", StringComparison.OrdinalIgnoreCase) ? name : $"{name}.xp"; } } diff --git a/XplorePlane/ViewModels/Cnc/CncProgramTreeRootViewModel.cs b/XplorePlane/ViewModels/Cnc/CncProgramTreeRootViewModel.cs new file mode 100644 index 0000000..2b1e5ea --- /dev/null +++ b/XplorePlane/ViewModels/Cnc/CncProgramTreeRootViewModel.cs @@ -0,0 +1,31 @@ +using Prism.Mvvm; +using System.Collections.ObjectModel; + +namespace XplorePlane.ViewModels.Cnc +{ + public class CncProgramTreeRootViewModel : BindableBase + { + private string _displayName; + private bool _isExpanded = true; + + public CncProgramTreeRootViewModel(string displayName, ObservableCollection children) + { + _displayName = displayName; + Children = children; + } + + public string DisplayName + { + get => _displayName; + set => SetProperty(ref _displayName, value); + } + + public bool IsExpanded + { + get => _isExpanded; + set => SetProperty(ref _isExpanded, value); + } + + public ObservableCollection Children { get; } + } +} diff --git a/XplorePlane/Views/Cnc/CncPageView.xaml b/XplorePlane/Views/Cnc/CncPageView.xaml index 1b86e33..2f1720f 100644 --- a/XplorePlane/Views/Cnc/CncPageView.xaml +++ b/XplorePlane/Views/Cnc/CncPageView.xaml @@ -91,44 +91,53 @@ - - - - - - - - - + + + + + + + + + +