diff --git a/CSI-H238M/CSI-H238M/Models/Model.cs b/CSI-H238M/CSI-H238M/Models/Model.cs
index d3fe798..93dc880 100644
--- a/CSI-H238M/CSI-H238M/Models/Model.cs
+++ b/CSI-H238M/CSI-H238M/Models/Model.cs
@@ -32,7 +32,7 @@ namespace COFTester.Models
///
public class TestParameters : INotifyPropertyChanged
{
- private double _sledMass = 0.0; // 不设置默认值,从寄存器读取
+ private double _sledMass = 200.0; // 默认值 200g
private double _testSpeed = 0.0; // 不设置默认值,从寄存器读取
private double _testDuration = 0.0; // 不设置默认值,从寄存器读取
private double _testStroke = 0.0; // 不设置默认值,从寄存器读取
diff --git a/CSI-H238M/CSI-H238M/Services/ModbusService.cs b/CSI-H238M/CSI-H238M/Services/ModbusService.cs
index dc5963a..3511060 100644
--- a/CSI-H238M/CSI-H238M/Services/ModbusService.cs
+++ b/CSI-H238M/CSI-H238M/Services/ModbusService.cs
@@ -727,6 +727,18 @@ namespace COFTester.Services
await WriteTestParametersAsync(parameters);
}
+ ///
+ /// 公开方法:写入水平测试参数到 PLC 寄存器(D370, D380)
+ /// 供标准选择功能调用
+ ///
+ public abstract Task WriteHorizontalTestParametersAsync(double speed, double displacement);
+
+ ///
+ /// 公开方法:写入升降测试参数到 PLC 寄存器(D330, D340)
+ /// 供自定义参数更新功能调用
+ ///
+ public abstract Task WriteVerticalTestParametersAsync(double speed, double displacement);
+
///
/// 將兩個寄存器轉換為 32位浮點型 (IEEE 754)
///
@@ -1305,6 +1317,76 @@ namespace COFTester.Services
}
}
+ ///
+ /// 写入水平测试参数到 PLC 寄存器(D370 水平测试速度, D380 水平测试位移)
+ /// 供标准选择功能调用
+ ///
+ public override async Task WriteHorizontalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusTCP] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D370 水平測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestSpeedRegister, speedRegs);
+
+ // D380 水平測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 水平測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 水平測試速度: {speed} mm/min → D{_config.HorizontalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 水平測試位移: {displacement} mm → D{_config.HorizontalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 水平測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 写入升降测试参数到 PLC 寄存器(D330 升降测试速度, D340 升降测试位移)
+ /// 供自定义参数更新功能调用
+ ///
+ public override async Task WriteVerticalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusTCP] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D330 升降測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestSpeedRegister, speedRegs);
+
+ // D340 升降測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 升降測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 升降測試速度: {speed} mm/min → D{_config.VerticalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降測試位移: {displacement} mm → D{_config.VerticalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 升降測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
///
/// 讀取位置數據(升降位置和水平位置)
/// D12 升降位置(只讀), D16 水平位置(只讀)
@@ -1868,6 +1950,76 @@ namespace COFTester.Services
}
}
+ ///
+ /// 写入水平测试参数到 PLC 寄存器(D370 水平测试速度, D380 水平测试位移)
+ /// 供标准选择功能调用
+ ///
+ public override async Task WriteHorizontalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusRTU] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D370 水平測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestSpeedRegister, speedRegs);
+
+ // D380 水平測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 水平測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 水平測試速度: {speed} mm/min → D{_config.HorizontalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 水平測試位移: {displacement} mm → D{_config.HorizontalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 水平測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 写入升降测试参数到 PLC 寄存器(D330 升降测试速度, D340 升降测试位移)
+ /// 供自定义参数更新功能调用
+ ///
+ public override async Task WriteVerticalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusRTU] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D330 升降測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestSpeedRegister, speedRegs);
+
+ // D340 升降測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 升降測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 升降測試速度: {speed} mm/min → D{_config.VerticalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降測試位移: {displacement} mm → D{_config.VerticalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 水平測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
///
/// 讀取位置數據
///
@@ -2380,6 +2532,76 @@ namespace COFTester.Services
}
}
+ ///
+ /// 写入水平测试参数到 PLC 寄存器(D370 水平测试速度, D380 水平测试位移)
+ /// 供标准选择功能调用
+ ///
+ public override async Task WriteHorizontalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusASCII] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D370 水平測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestSpeedRegister, speedRegs);
+
+ // D380 水平測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.HorizontalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 水平測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 水平測試速度: {speed} mm/min → D{_config.HorizontalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 水平測試位移: {displacement} mm → D{_config.HorizontalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 水平測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
+ ///
+ /// 写入升降测试参数到 PLC 寄存器(D330 升降测试速度, D340 升降测试位移)
+ /// 供自定义参数更新功能调用
+ ///
+ public override async Task WriteVerticalTestParametersAsync(double speed, double displacement)
+ {
+ if (_modbusMaster == null || !_isConnected)
+ {
+ System.Diagnostics.Debug.WriteLine("[ModbusASCII] 無法寫入參數:設備未連接");
+ return;
+ }
+
+ try
+ {
+ // D330 升降測試速度
+ var speedRegs = ConvertFloatToRegisters((float)speed);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestSpeedRegister, speedRegs);
+
+ // D340 升降測試位移
+ var dispRegs = ConvertFloatToRegisters((float)displacement);
+ await _modbusMaster.WriteMultipleRegistersAsync(
+ _config.SlaveId, _config.VerticalTestDisplacementRegister, dispRegs);
+
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 升降測試參數寫入完成:");
+ System.Diagnostics.Debug.WriteLine($" 升降測試速度: {speed} mm/min → D{_config.VerticalTestSpeedRegister}");
+ System.Diagnostics.Debug.WriteLine($" 升降測試位移: {displacement} mm → D{_config.VerticalTestDisplacementRegister}");
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 升降測試參數寫入失敗: {ex.Message}");
+ throw;
+ }
+ }
+
///
/// 讀取位置數據
///
diff --git a/CSI-H238M/CSI-H238M/Services/PdfReportService.cs b/CSI-H238M/CSI-H238M/Services/PdfReportService.cs
index 16bcdfc..9904c21 100644
--- a/CSI-H238M/CSI-H238M/Services/PdfReportService.cs
+++ b/CSI-H238M/CSI-H238M/Services/PdfReportService.cs
@@ -301,9 +301,6 @@ namespace COFTester.Services
$"滑块质量: {parameters.SledMass:F1} g",
$"测试速度: {parameters.TestSpeed:F1} mm/min",
$"测试行程: {parameters.TestStroke:F1} mm",
- $"测试时长: {parameters.TestDuration:F1} s",
- $"静摩擦计算区间: {parameters.StaticCalcStart:F1} - {parameters.StaticCalcEnd:F1} mm",
- $"动摩擦计算区间: {parameters.KineticCalcStart:F1} - {parameters.KineticCalcEnd:F1} mm",
$"操作员: {parameters.Operator}"
} : new[]
{
@@ -311,9 +308,6 @@ namespace COFTester.Services
$"Sled Mass: {parameters.SledMass:F1} g",
$"Test Speed: {parameters.TestSpeed:F1} mm/min",
$"Test Stroke: {parameters.TestStroke:F1} mm",
- $"Test Duration: {parameters.TestDuration:F1} s",
- $"Static COF Range: {parameters.StaticCalcStart:F1} - {parameters.StaticCalcEnd:F1} mm",
- $"Kinetic COF Range: {parameters.KineticCalcStart:F1} - {parameters.KineticCalcEnd:F1} mm",
$"Operator: {parameters.Operator}"
};
diff --git a/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs b/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs
index c9bf85d..1235868 100644
--- a/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs
+++ b/CSI-H238M/CSI-H238M/ViewModels/ViewModel.cs
@@ -45,6 +45,7 @@ namespace COFTester.ViewModels
private string _testButtonText; // 测试按钮文本
private bool _m31Status = false; // M31状态:true=测试中,false=停止
private bool _canStartTest = true; // 是否可以开始测试
+ private string _selectedStandard = ""; // 选中的标准:GB10006/ISO8295/ASTMD1894
public MainViewModel(IDataAcquisitionService daqService, DataProcessingService processingService, AppConfig config)
{
@@ -79,6 +80,12 @@ namespace COFTester.ViewModels
ZeroCalibrationCommand = new RelayCommand(ZeroCalibration, () => !_isTesting && IsConnected);
ForceCalibrationCommand = new RelayCommand(ForceCalibration, () => !_isTesting && IsConnected);
ReturnToOriginCommand = new RelayCommand(ReturnToOrigin, () => !_isTesting && IsConnected);
+
+ // 标准选择命令
+ SelectStandardCommand = new RelayCommand(SelectStandard, _ => IsConnected);
+
+ // 自定义参数更新命令
+ UpdateCustomParametersCommand = new AsyncRelayCommand(UpdateCustomParametersAsync, () => IsConnected && SelectedStandard == "Custom");
Parameters = _config.DefaultTestParameters ?? new TestParameters();
TestRecords = new ObservableCollection();
@@ -498,6 +505,20 @@ namespace COFTester.ViewModels
get => _testButtonText;
set { _testButtonText = value; OnPropertyChanged(); }
}
+
+ ///
+ /// 当前选中的测试标准
+ ///
+ public string SelectedStandard
+ {
+ get => _selectedStandard;
+ set { _selectedStandard = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsStandardParametersReadOnly)); }
+ }
+
+ ///
+ /// 标准参数是否只读(非自定义模式时为只读)
+ ///
+ public bool IsStandardParametersReadOnly => SelectedStandard != "Custom";
#endregion
@@ -517,6 +538,12 @@ namespace COFTester.ViewModels
public ICommand ZeroCalibrationCommand { get; }
public ICommand ForceCalibrationCommand { get; }
public ICommand ReturnToOriginCommand { get; }
+
+ // 标准选择命令
+ public ICommand SelectStandardCommand { get; }
+
+ // 自定义参数更新命令
+ public ICommand UpdateCustomParametersCommand { get; }
#endregion
#region Event Handlers
@@ -648,12 +675,21 @@ namespace COFTester.ViewModels
if (deviceParams != null)
{
- // 只更新设置页显示的4个测试参数
+ // 更新设置页显示的4个测试参数
Parameters.HorizontalTestSpeed = deviceParams.HorizontalTestSpeed;
Parameters.HorizontalTestDisplacement = deviceParams.HorizontalTestDisplacement;
Parameters.VerticalTestSpeed = deviceParams.VerticalTestSpeed;
Parameters.VerticalTestDisplacement = deviceParams.VerticalTestDisplacement;
+ // 如果没有选择标准,使用PLC的默认值更新报告参数
+ if (string.IsNullOrEmpty(SelectedStandard))
+ {
+ Parameters.TestSpeed = deviceParams.HorizontalTestSpeed;
+ Parameters.TestStroke = deviceParams.HorizontalTestDisplacement;
+ Parameters.Standard = "自定义配置"; // 显示为PLC默认配置
+ System.Diagnostics.Debug.WriteLine("[ViewModel] 未选择标准,使用PLC默认值");
+ }
+
// 通知UI更新
OnPropertyChanged(nameof(Parameters));
@@ -998,6 +1034,154 @@ namespace COFTester.ViewModels
}
}
+ ///
+ /// 标准选择 - 根据选择的标准写入对应的测试参数到寄存器
+ ///
+ private async void SelectStandard(string standardCode)
+ {
+ try
+ {
+ if (!IsConnected)
+ {
+ StatusMessage = "请先连接设备";
+ MessageBox.Show("请先连接设备后再选择标准", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
+ return;
+ }
+
+ if (_daqService is not ModbusServiceBase modbusService)
+ {
+ StatusMessage = "当前通信模式不支持标准选择";
+ return;
+ }
+
+ // 更新选中状态(触发按钮高亮和输入框可编辑状态)
+ SelectedStandard = standardCode;
+
+ // 如果选择自定义,不写入参数,只切换到可编辑模式
+ if (standardCode == "Custom")
+ {
+ StatusMessage = "已切换到自定义模式,可手动修改参数";
+ System.Diagnostics.Debug.WriteLine("[ViewModel] 切换到自定义模式");
+ CommandManager.InvalidateRequerySuggested();
+ return;
+ }
+
+ // 根据标准代码设置参数
+ double speed = 0;
+ double displacement = 0;
+ string standardName = "";
+
+ switch (standardCode)
+ {
+ case "GB10006":
+ speed = 100.0; // GB/T 10006-2021: 100 mm/min
+ displacement = 80.0; // 80 mm
+ standardName = "GB/T 10006-2021";
+ break;
+ case "ISO8295":
+ speed = 100.0; // ISO 8295:1995: 100 mm/min
+ displacement = 80.0; // 80 mm
+ standardName = "ISO 8295:1995";
+ break;
+ case "ASTMD1894":
+ speed = 150.0; // ASTM D1894-24: 150 mm/min
+ displacement = 150.0; // 150 mm
+ standardName = "ASTM D1894-24";
+ break;
+ default:
+ StatusMessage = "未知的标准代码";
+ return;
+ }
+
+ StatusMessage = $"正在应用标准 {standardName}...";
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 选择标准: {standardName}");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 保持用户选择的滑块质量: {Parameters.SledMass} g");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 水平测试速度: {speed} mm/min");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 水平测试位移: {displacement} mm");
+
+ // 写入寄存器(只写入水平测试参数)
+ await modbusService.WriteHorizontalTestParametersAsync(speed, displacement);
+
+ // 更新所有相关参数(用于报告生成)
+ // 注意:不更新 SledMass,保留用户在UI上选择的质量值
+ Parameters.Standard = standardName; // 更新标准名称
+ // Parameters.SledMass 保持用户选择的值(200g/300g/500g)
+ Parameters.TestSpeed = speed; // 更新测试速度(用于报告)
+ Parameters.TestStroke = displacement; // 更新测试行程(用于报告)
+ Parameters.HorizontalTestSpeed = speed; // 更新水平测试速度
+ Parameters.HorizontalTestDisplacement = displacement; // 更新水平测试位移
+ OnPropertyChanged(nameof(Parameters));
+
+ StatusMessage = $"已应用标准: {standardName}";
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 标准 {standardName} 应用成功");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 升降参数保持PLC原值不变");
+ }
+ catch (Exception ex)
+ {
+ StatusMessage = $"应用标准失败: {ex.Message}";
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 应用标准失败: {ex.Message}");
+ MessageBox.Show($"应用标准时发生错误:\n{ex.Message}",
+ "错误",
+ MessageBoxButton.OK,
+ MessageBoxImage.Error);
+ }
+ }
+
+ ///
+ /// 更新自定义参数到设备
+ ///
+ private async Task UpdateCustomParametersAsync()
+ {
+ try
+ {
+ if (!IsConnected)
+ {
+ StatusMessage = "请先连接设备";
+ return;
+ }
+
+ if (_daqService is not ModbusServiceBase modbusService)
+ {
+ StatusMessage = "当前通信模式不支持参数更新";
+ return;
+ }
+
+ StatusMessage = "正在更新自定义参数...";
+ System.Diagnostics.Debug.WriteLine("[ViewModel] 开始更新自定义参数");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 水平测试速度: {Parameters.HorizontalTestSpeed} mm/min");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 水平测试位移: {Parameters.HorizontalTestDisplacement} mm");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 升降测试速度: {Parameters.VerticalTestSpeed} mm/min");
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 升降测试位移: {Parameters.VerticalTestDisplacement} mm");
+
+ // 写入水平测试参数
+ await modbusService.WriteHorizontalTestParametersAsync(
+ Parameters.HorizontalTestSpeed,
+ Parameters.HorizontalTestDisplacement);
+
+ // 写入升降测试参数
+ await modbusService.WriteVerticalTestParametersAsync(
+ Parameters.VerticalTestSpeed,
+ Parameters.VerticalTestDisplacement);
+
+ StatusMessage = "自定义参数已更新到设备";
+ System.Diagnostics.Debug.WriteLine("[ViewModel] 自定义参数更新成功");
+
+ MessageBox.Show("自定义参数已成功更新到设备",
+ "成功",
+ MessageBoxButton.OK,
+ MessageBoxImage.Information);
+ }
+ catch (Exception ex)
+ {
+ StatusMessage = $"更新参数失败: {ex.Message}";
+ System.Diagnostics.Debug.WriteLine($"[ViewModel] 更新参数失败: {ex.Message}");
+ MessageBox.Show($"更新参数时发生错误:\n{ex.Message}",
+ "错误",
+ MessageBoxButton.OK,
+ MessageBoxImage.Error);
+ }
+ }
+
///
/// 复归 - 向 M1300 写入命令 3
///
@@ -1510,6 +1694,52 @@ namespace COFTester.ViewModels
}
}
+ ///
+ /// 泛型 RelayCommand 實現,支持命令參數
+ ///
+ public class RelayCommand : ICommand
+ {
+ private readonly Action _execute;
+ private readonly Func? _canExecute;
+
+ public RelayCommand(Action execute, Func? canExecute = null)
+ {
+ _execute = execute ?? throw new ArgumentNullException(nameof(execute));
+ _canExecute = canExecute;
+
+ // 訂閱 CommandManager 的 RequerySuggested 事件
+ CommandManager.RequerySuggested += OnCanExecuteChanged;
+ }
+
+ public bool CanExecute(object? parameter)
+ {
+ if (parameter is T typedParameter)
+ {
+ return _canExecute == null || _canExecute(typedParameter);
+ }
+ return _canExecute == null;
+ }
+
+ public void Execute(object? parameter)
+ {
+ if (parameter is T typedParameter)
+ {
+ _execute(typedParameter);
+ }
+ }
+
+ public event EventHandler? CanExecuteChanged
+ {
+ add { CommandManager.RequerySuggested += value; }
+ remove { CommandManager.RequerySuggested -= value; }
+ }
+
+ private void OnCanExecuteChanged(object? sender, EventArgs e)
+ {
+ // 自動觸發 CanExecuteChanged
+ }
+ }
+
///
/// 異步 RelayCommand 實現,用於異步操作(如連接設備)
///
diff --git a/CSI-H238M/CSI-H238M/Views/ConfigWindow.xaml b/CSI-H238M/CSI-H238M/Views/ConfigWindow.xaml
index d97077e..2c98acb 100644
--- a/CSI-H238M/CSI-H238M/Views/ConfigWindow.xaml
+++ b/CSI-H238M/CSI-H238M/Views/ConfigWindow.xaml
@@ -164,7 +164,7 @@
-
+
-
+
-
+
-
+
diff --git a/CSI-H238M/CSI-H238M/Views/MainWindow.xaml b/CSI-H238M/CSI-H238M/Views/MainWindow.xaml
index 7c2dd97..63f2eda 100644
--- a/CSI-H238M/CSI-H238M/Views/MainWindow.xaml
+++ b/CSI-H238M/CSI-H238M/Views/MainWindow.xaml
@@ -1,7 +1,7 @@
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+