feat(mqtt): 实现MQTT别名批量修改功能

主要改动:
  - 在 MqttServerDetailView 中,允许用户在关联变量列表中进行多项选择。
  - 修改了 ModifyAlias 命令,使其能够处理多个选中项,并调用批量编辑对话框。
  - 新增了 MqttAliasBatchEditDialogViewModel 的构造函数,使其可以接收并编辑已存在的别名列表。
  - 通过 SelectedItemsBehavior 辅助类,实现了 DataGrid 中 SelectedItems 的双向绑定。
  - 更新了相关视图和视图模型,以支持新的批量操作流程。
This commit is contained in:
2025-10-07 19:04:30 +08:00
parent b753e5ea73
commit 6daca3eaf6
4 changed files with 441 additions and 243 deletions

View File

@@ -16,25 +16,41 @@ namespace DMS.WPF.ViewModels.Dialogs
public partial class MqttAliasBatchEditDialogViewModel : DialogViewModelBase<List<MqttAliasItem>>
{
[ObservableProperty]
private ObservableCollection<MqttAliasItem> _variableMqttAliases = new();
private ObservableCollection<MqttAliasItem> _currentMqttAliases = new();
[ObservableProperty]
private MqttServerItem _selectedMqttServer;
public MqttAliasBatchEditDialogViewModel(
List<VariableItem> variables,
List<VariableItem> variables,
MqttServerItem mqttServer)
{
_selectedMqttServer = mqttServer;
InitializeVariableMqttAliases(variables);
InitializeCurrentMqttAliases(variables);
}
public MqttAliasBatchEditDialogViewModel(List<MqttAliasItem> mqttAliasItems)
{
foreach (var item in mqttAliasItems)
{
MqttAliasItem aliasItem = new MqttAliasItem();
aliasItem.Id = item.Id;
aliasItem.Alias = item.Alias;
aliasItem.VariableId = item.VariableId;
aliasItem.MqttServerId = item.MqttServerId;
aliasItem.Variable = item.Variable;
aliasItem.MqttServerName = item.MqttServerName;
aliasItem.MqttServer = item.MqttServer;
CurrentMqttAliases.Add(aliasItem);
}
}
/// <summary>
/// 初始化变量MQTT别名列表
/// </summary>
private void InitializeVariableMqttAliases(List<VariableItem> variables)
private void InitializeCurrentMqttAliases(List<VariableItem> variables)
{
VariableMqttAliases.Clear();
CurrentMqttAliases.Clear();
foreach (var variable in variables)
{
@@ -51,7 +67,7 @@ namespace DMS.WPF.ViewModels.Dialogs
Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable)
};
VariableMqttAliases.Add(variableMqttAlias);
CurrentMqttAliases.Add(variableMqttAlias);
}
}
@@ -70,7 +86,7 @@ namespace DMS.WPF.ViewModels.Dialogs
[RelayCommand]
private void Confirm()
{
var result = VariableMqttAliases.ToList();
var result = CurrentMqttAliases.ToList();
Close(result);
}
@@ -92,7 +108,7 @@ namespace DMS.WPF.ViewModels.Dialogs
if (string.IsNullOrWhiteSpace(prefix))
return;
foreach (var alias in VariableMqttAliases)
foreach (var alias in CurrentMqttAliases)
{
alias.Alias = $"{prefix}_{alias.Variable.Name}";
}