2025-07-05 22:57:54 +08:00
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
|
using CommunityToolkit.Mvvm.Input;
|
2025-10-05 17:50:41 +08:00
|
|
|
using DMS.Application.Interfaces.Management;
|
2025-07-26 10:05:43 +08:00
|
|
|
using DMS.Core.Models;
|
2025-09-03 18:22:01 +08:00
|
|
|
using DMS.WPF.Interfaces;
|
2025-07-26 10:05:43 +08:00
|
|
|
using DMS.WPF.ViewModels.Items;
|
2025-10-05 17:50:41 +08:00
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using System.Collections.ObjectModel;
|
2025-07-05 22:57:54 +08:00
|
|
|
|
2025-09-06 12:03:39 +08:00
|
|
|
namespace DMS.WPF.ViewModels
|
2025-07-05 22:57:54 +08:00
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// MQTT服务器详情视图模型。
|
|
|
|
|
/// 负责管理单个MQTT服务器的配置及其关联的变量数据。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public partial class MqttServerDetailViewModel : ViewModelBase
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger<MqttServerDetailViewModel> _logger;
|
|
|
|
|
private readonly IDialogService _dialogService;
|
2025-09-04 19:59:35 +08:00
|
|
|
private readonly INotificationService _notificationService;
|
2025-10-05 17:50:41 +08:00
|
|
|
private readonly IMqttManagementService _mqttManagementService;
|
|
|
|
|
private readonly IDataStorageService _dataStorageService;
|
|
|
|
|
private readonly INavigationService _navigationService;
|
2025-07-05 22:57:54 +08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当前正在编辑的MQTT服务器对象。
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ObservableProperty]
|
2025-07-26 10:05:43 +08:00
|
|
|
private MqttServerItemViewModel _currentMqtt;
|
2025-07-05 22:57:54 +08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 与当前MQTT服务器关联的变量数据集合。
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ObservableProperty]
|
2025-07-26 10:05:43 +08:00
|
|
|
private ObservableCollection<VariableMqttAlias> _associatedVariables;
|
2025-07-17 17:28:12 +08:00
|
|
|
|
2025-07-05 22:57:54 +08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 构造函数。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="logger">日志服务。</param>
|
|
|
|
|
/// <param name="dataServices">数据服务。</param>
|
|
|
|
|
/// <param name="dialogService">对话框服务。</param>
|
2025-09-04 17:29:24 +08:00
|
|
|
/// <param name="notificationService">通知服务。</param>
|
2025-10-05 17:50:41 +08:00
|
|
|
/// <param name="mqttManagementService">MQTT管理服务</param>
|
|
|
|
|
/// <param name="navigationService">导航服务</param>
|
2025-09-09 13:35:16 +08:00
|
|
|
public MqttServerDetailViewModel(ILogger<MqttServerDetailViewModel> logger,
|
2025-10-05 17:50:41 +08:00
|
|
|
IDialogService dialogService,
|
|
|
|
|
INotificationService notificationService,
|
|
|
|
|
IMqttManagementService mqttManagementService,
|
|
|
|
|
IDataStorageService dataStorageService,
|
|
|
|
|
INavigationService navigationService)
|
2025-07-05 22:57:54 +08:00
|
|
|
{
|
|
|
|
|
_logger = logger;
|
|
|
|
|
_dialogService = dialogService;
|
2025-09-04 17:29:24 +08:00
|
|
|
_notificationService = notificationService;
|
2025-10-05 17:50:41 +08:00
|
|
|
_mqttManagementService = mqttManagementService;
|
|
|
|
|
this._dataStorageService = dataStorageService;
|
|
|
|
|
_navigationService = navigationService;
|
2025-07-05 22:57:54 +08:00
|
|
|
}
|
|
|
|
|
|
2025-10-05 17:50:41 +08:00
|
|
|
|
2025-07-05 22:57:54 +08:00
|
|
|
|
|
|
|
|
/// <summary>
|
2025-10-05 17:50:41 +08:00
|
|
|
/// 重新加载当前MQTT服务器数据
|
2025-07-05 22:57:54 +08:00
|
|
|
/// </summary>
|
|
|
|
|
[RelayCommand]
|
2025-10-05 17:50:41 +08:00
|
|
|
private async Task Reload()
|
2025-07-05 22:57:54 +08:00
|
|
|
{
|
2025-10-05 17:50:41 +08:00
|
|
|
if (CurrentMqtt?.Id > 0)
|
|
|
|
|
{
|
|
|
|
|
// 重新加载当前MQTT服务器数据
|
|
|
|
|
var updatedMqtt = await _mqttManagementService.GetMqttServerByIdAsync(CurrentMqtt.Id);
|
|
|
|
|
if (updatedMqtt != null)
|
|
|
|
|
{
|
|
|
|
|
// 更新CurrentMqtt的属性
|
|
|
|
|
CurrentMqtt.ServerName = updatedMqtt.ServerName;
|
|
|
|
|
CurrentMqtt.ServerUrl = updatedMqtt.ServerUrl;
|
|
|
|
|
CurrentMqtt.Port = updatedMqtt.Port;
|
|
|
|
|
CurrentMqtt.ClientId = updatedMqtt.ClientId;
|
|
|
|
|
CurrentMqtt.Username = updatedMqtt.Username;
|
|
|
|
|
CurrentMqtt.Password = updatedMqtt.Password;
|
|
|
|
|
CurrentMqtt.PublishTopic = updatedMqtt.PublishTopic;
|
|
|
|
|
CurrentMqtt.SubscribeTopic = updatedMqtt.SubscribeTopic;
|
|
|
|
|
CurrentMqtt.MessageHeader = updatedMqtt.MessageHeader;
|
|
|
|
|
CurrentMqtt.MessageContent = updatedMqtt.MessageContent;
|
|
|
|
|
CurrentMqtt.MessageFooter = updatedMqtt.MessageFooter;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-05 22:57:54 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-10-05 17:50:41 +08:00
|
|
|
/// 导航回MQTT服务器列表页面
|
2025-07-05 22:57:54 +08:00
|
|
|
/// </summary>
|
|
|
|
|
[RelayCommand]
|
2025-10-05 17:50:41 +08:00
|
|
|
private async Task NavigateToMqtts()
|
2025-07-05 22:57:54 +08:00
|
|
|
{
|
2025-10-05 17:50:41 +08:00
|
|
|
await _navigationService.NavigateToAsync(this, new NavigationParameter(nameof(MqttsViewModel)));
|
2025-07-05 22:57:54 +08:00
|
|
|
}
|
|
|
|
|
|
2025-10-05 17:50:41 +08:00
|
|
|
public override Task OnNavigatedToAsync(NavigationParameter parameter)
|
2025-07-05 22:57:54 +08:00
|
|
|
{
|
2025-10-05 17:50:41 +08:00
|
|
|
if (parameter == null) return Task.CompletedTask;
|
|
|
|
|
|
|
|
|
|
if (_dataStorageService.MqttServers.TryGetValue(parameter.TargetId, out var mqttServerItem))
|
|
|
|
|
{
|
|
|
|
|
CurrentMqtt = mqttServerItem;
|
|
|
|
|
|
|
|
|
|
}
|
2025-07-05 22:57:54 +08:00
|
|
|
|
|
|
|
|
|
2025-10-05 17:50:41 +08:00
|
|
|
return Task.CompletedTask;
|
2025-07-05 22:57:54 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|