using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using DMS.Application.DTOs; using DMS.WPF.ViewModels.Items; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; namespace DMS.WPF.ViewModels.Dialogs { /// /// MQTT别名批量编辑对话框的视图模型 /// public partial class MqttAliasBatchEditDialogViewModel : DialogViewModelBase> { [ObservableProperty] private ObservableCollection _variableMqttAliases = new(); [ObservableProperty] private MqttServerItemViewModel _selectedMqttServer; public MqttAliasBatchEditDialogViewModel( List variables, MqttServerItemViewModel mqttServer) { _selectedMqttServer = mqttServer; InitializeVariableMqttAliases(variables); } /// /// 初始化变量MQTT别名列表 /// private void InitializeVariableMqttAliases(List variables) { VariableMqttAliases.Clear(); foreach (var variable in variables) { // 检查该变量是否已经有针对此MQTT服务器的别名 var existingAlias = variable.MqttAliases?.FirstOrDefault(ma => ma.MqttServerId == SelectedMqttServer.Id); var variableMqttAlias = new VariableMqttAliasItemViewModel { VariableId = variable.Id, MqttServerId = SelectedMqttServer.Id, MqttServerName = SelectedMqttServer.ServerName, MqttServer = SelectedMqttServer, Variable = variable, Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable) }; VariableMqttAliases.Add(variableMqttAlias); } } /// /// 生成默认别名 /// private string GenerateDefaultAlias(VariableItemViewModel variable) { // 可以根据需要自定义默认别名生成逻辑 return $"{variable.Name}"; } /// /// 确认编辑 /// [RelayCommand] private void Confirm() { var result = VariableMqttAliases.ToList(); Close(result); } /// /// 取消编辑 /// [RelayCommand] private void Cancel() { Close(null); } /// /// 全部应用相同的别名前缀 /// [RelayCommand] private void ApplySamePrefix(string prefix) { if (string.IsNullOrWhiteSpace(prefix)) return; foreach (var alias in VariableMqttAliases) { alias.Alias = $"{prefix}_{alias.Variable.Name}"; } } } }