功能增强:添加 InputDialog 并改进变量管理功能

- 新增 InputDialog 组件:
     - 添加了 InputDialog.xaml 和 InputDialog.xaml.cs 文件
     - 创建了 InputDialogViewModel.cs,继承自 DialogViewModelBase<string?>
     - 实现了可重用的输入对话框,支持自定义标题、消息、标签和占位符

   - 完善变量管理服务:
     - 在 MappingProfile.cs 中添加了 VariableDto 到 VariableDto 的映射配置
     - 在 VariableManagementService.cs 中注入 IMapper 依赖项
     - 修改了 UpdateVariablesAsync 方法,使用 AutoMapper 进行更安全的更新操作

   - 扩展变量表功能:
     - 在 VariableTableViewModel.cs 中添加了 ModifyConversionFormula 命令
     - 实现了批量修改变量转换公式功能,支持用户通过对话框输入新公式
     - 添加了相应的 UI 通知和错误处理
     - 在 VariableTableView.xaml 中添加了"修改数值转换公式"菜单项

   - 集成 InputDialog 到对话框服务:
     - 在 DialogService.cs 中注册了 InputDialogViewModel 和 InputDialog 的映射关系
This commit is contained in:
2025-10-02 18:34:23 +08:00
parent 59637ed0a6
commit e5e2e8de5b
8 changed files with 164 additions and 2 deletions

View File

@@ -0,0 +1,64 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace DMS.WPF.ViewModels.Dialogs;
public partial class InputDialogViewModel : DialogViewModelBase<string?>
{
[ObservableProperty]
private string _message = string.Empty;
[ObservableProperty]
private string _inputLabel = "输入";
[ObservableProperty]
private string _inputPlaceholder = "请输入...";
[ObservableProperty]
private string? _inputText;
[ObservableProperty]
private string _primaryButtonText = "确定";
[ObservableProperty]
private string _closeButtonText = "取消";
public InputDialogViewModel(string title, string message)
{
Title = title;
Message = message;
}
public InputDialogViewModel(string title, string message, string inputLabel) : this(title, message)
{
InputLabel = inputLabel;
}
public InputDialogViewModel(string title, string message, string inputLabel, string inputPlaceholder) : this(title, message, inputLabel)
{
InputPlaceholder = inputPlaceholder;
}
public InputDialogViewModel(string title, string message, string inputLabel, string inputPlaceholder, string? defaultValue) : this(title, message, inputLabel, inputPlaceholder)
{
InputText = defaultValue;
}
public InputDialogViewModel()
{
Title = "输入";
Message = "请输入信息:";
}
[RelayCommand]
private void Confirm()
{
Close(InputText);
}
[RelayCommand]
private void Cancel()
{
Close(null);
}
}

View File

@@ -11,6 +11,7 @@ using DMS.Core.Events;
using DMS.Core.Models;
using DMS.WPF.Interfaces;
using DMS.WPF.ViewModels.Dialogs;
using DMS.WPF.ViewModels.Dialogs;
using DMS.WPF.ViewModels.Items;
using Microsoft.Extensions.DependencyInjection;
using ObservableCollections;
@@ -539,6 +540,48 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
}
[RelayCommand]
public async Task ModifyConversionFormula()
{
// 检查是否有变量被选中
if (SelectedVariables.Count == 0)
{
_notificationService.ShowInfo("请选择要修改转换公式的变量");
return;
}
// 获取选中的变量列表
var validVariables = SelectedVariables.Cast<VariableItemViewModel>().ToList();
// --- 对话框调用 ---
var viewModel = new InputDialogViewModel("修改数值转换公式", "请输入新的转换公式 (使用'x'代表变量值):", validVariables.First().ConversionFormula);
string newFormula = await _dialogService.ShowDialogAsync(viewModel);
if (newFormula != null) // 当用户输入了新公式并确认后
{
// 更新所有选定变量的转换公式
foreach (var variable in validVariables)
{
variable.ConversionFormula = newFormula;
variable.UpdatedAt = DateTime.Now;
}
// 批量更新数据库中的变量数据
var variableDtos = _mapper.Map<List<VariableDto>>(validVariables);
var result = await _variableManagementService.UpdateVariablesAsync(variableDtos);
if (result > 0)
{
// 显示成功通知
_notificationService.ShowSuccess($"已成功更新 {validVariables.Count} 个变量的转换公式");
}
else
{
_notificationService.ShowError("更新转换公式失败");
}
}
}
/// <summary>
/// 为选定的变量添加MQTT服务器。