Files
DMS/DMS.WPF/ViewModels/SettingViewModel.cs
David P.G d4562e600e 1 feat: 添加变量导入模板配置和工厂模式实现
2
    3 -
      在AppSettings中添加VariableImportTemplate配置项,用于设置变量导入的默认参数(IsActive、PollingIn
      terval、IsHistoryEnabled、HistoryDeadband)
    4 - 修改AppSettings.Load()方法,优化配置加载逻辑
    5 -
      实现IVariableItemViewModelFactory和VariableItemViewModelFactory,使用工厂模式创建VariableItemVie
      wModel实例
    6 - 在ImportOpcUaDialogViewModel中使用工厂创建VariableItemViewModel实例,以应用默认配置
    7 -
      在SettingViewModel和SettingView中添加变量导入设置界面和相关属性(VariablePollingInterval、Variab
      leIsActive、VariableIsHistoryEnabled、VariableHistoryDeadband)
    8 - 移除VariableItemViewModel构造函数中的轮询间隔默认值设置,改由工厂模式设置
    9 - 优化SplashViewModel中配置加载逻辑
   10 - 移除MainView.xaml.cs中已注释的代码
   11 - 调整VariableTableView.xaml的UI布局和菜单结构
   12 - 注册IVariableItemViewModelFactory服务

  这些修改主要实现了几个关键功能:
   1. 引入了工厂模式来创建VariableItemViewModel实例,确保所有新创建的变量项都应用默认配置
   2. 添加了变量导入模板设置,用户可以在设置界面自定义导入变量的默认属性
   3. 对相关UI进行了调整和优化
2025-10-04 20:46:39 +08:00

218 lines
5.5 KiB
C#

using CommunityToolkit.Mvvm.Input;
using DMS.Application.Configurations;
using DMS.WPF.Helper;
using DMS.WPF.Interfaces;
namespace DMS.WPF.ViewModels;
public partial class SettingViewModel : ViewModelBase
{
private AppSettings _settings;
private readonly INotificationService _notificationService;
public SettingViewModel(AppSettings appSettings,INotificationService notificationService)
{
_settings = appSettings;
_notificationService = notificationService;
AvailableDbTypes = Enum.GetNames(typeof(SqlSugar.DbType)).ToList();
Themes = new List<string> { "浅色", "深色", "跟随系统" };
}
public List<string> Themes { get; }
public string SelectedTheme
{
get => _settings.Theme;
set
{
if (_settings.Theme != value)
{
_settings.Theme = value;
OnPropertyChanged();
_settings.Save();
ThemeHelper.ApplyTheme(value);
}
}
}
public List<string> AvailableDbTypes { get; set; }
public string SelectedDbType
{
get => _settings.Db.DbType;
set
{
if (_settings.Db.DbType != value)
{
_settings.Db.DbType = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public string Server
{
get => _settings.Db.Server;
set
{
if (_settings.Db.Server != value)
{
_settings.Db.Server = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public int Port
{
get => _settings.Db.Port;
set
{
if (_settings.Db.Port != value)
{
_settings.Db.Port = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public string UserId
{
get => _settings.Db.UserId;
set
{
if (_settings.Db.UserId != value)
{
_settings.Db.UserId = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public string Password
{
get => _settings.Db.Password;
set
{
if (_settings.Db.Password != value)
{
_settings.Db.Password = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public string DbName
{
get => _settings.Db.DbName;
set
{
if (_settings.Db.DbName != value)
{
_settings.Db.DbName = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public bool MinimizeToTrayOnClose
{
get => _settings.MinimizeToTrayOnClose;
set
{
if (_settings.MinimizeToTrayOnClose != value)
{
_settings.MinimizeToTrayOnClose = value;
OnPropertyChanged(nameof(MinimizeToTrayOnClose));
_settings.Save();
}
}
}
public int VariablePollingInterval
{
get => _settings.VariableImportTemplate.PollingInterval;
set
{
if (_settings.VariableImportTemplate.PollingInterval != value)
{
_settings.VariableImportTemplate.PollingInterval = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public bool VariableIsActive
{
get => _settings.VariableImportTemplate.IsActive;
set
{
if (_settings.VariableImportTemplate.IsActive != value)
{
_settings.VariableImportTemplate.IsActive = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public bool VariableIsHistoryEnabled
{
get => _settings.VariableImportTemplate.IsHistoryEnabled;
set
{
if (_settings.VariableImportTemplate.IsHistoryEnabled != value)
{
_settings.VariableImportTemplate.IsHistoryEnabled = value;
OnPropertyChanged();
_settings.Save();
}
}
}
public double VariableHistoryDeadband
{
get => _settings.VariableImportTemplate.HistoryDeadband;
set
{
if (_settings.VariableImportTemplate.HistoryDeadband != value)
{
_settings.VariableImportTemplate.HistoryDeadband = value;
OnPropertyChanged();
_settings.Save();
}
}
}
[RelayCommand]
private async Task TestConnection()
{
try
{
// 使用当前配置测试数据库连接
using var db = new SqlSugar.SqlSugarScope(new SqlSugar.ConnectionConfig()
{
DbType = (SqlSugar.DbType)Enum.Parse(typeof(SqlSugar.DbType), _settings.Db.DbType),
ConnectionString = _settings.ToConnectionString(),
IsAutoCloseConnection = true
});
await db.Ado.ExecuteCommandAsync("SELECT 1");
_notificationService.ShowSuccess("连接成功!");
}
catch (Exception ex)
{
_notificationService.ShowError($"连接失败:{ex.Message}", ex);
}
}
}