diff --git a/Models/VariableData.cs b/Models/VariableData.cs index 257a2e9..93e6c31 100644 --- a/Models/VariableData.cs +++ b/Models/VariableData.cs @@ -37,16 +37,16 @@ public class VariableData /// public string Description { get; set; } = String.Empty; - /// - /// 变量经过转换或格式化后的显示值。 - /// - public string DisplayValue { get; set; } = String.Empty; - /// /// 变量唯一标识符。 /// public int Id { get; set; } + /// + /// 变量经过转换或格式化后的显示值。 + /// + public string DisplayValue { get; set; } = String.Empty; + /// /// 指示是否需要对变量进行报警监测。 /// diff --git a/Models/VariableTable.cs b/Models/VariableTable.cs index 29e12d1..ffb6e15 100644 --- a/Models/VariableTable.cs +++ b/Models/VariableTable.cs @@ -1,4 +1,6 @@ -using CommunityToolkit.Mvvm.ComponentModel; +using System.Collections.ObjectModel; +using System.ComponentModel; +using CommunityToolkit.Mvvm.ComponentModel; using PMSWPF.Enums; namespace PMSWPF.Models; @@ -27,7 +29,17 @@ public partial class VariableTable : ObservableObject /// /// 变量表中包含的数据变量列表。 /// - public List DataVariables { get; set; } + [ObservableProperty] + public List dataVariables; + // [ObservableProperty] + // public ObservableCollection varDataList; + // + // // 列表改变了的事件 + // // public event Action> OnDataVariableListChanged; + // partial void OnDataVariablesChanged(List variableDatas) + // { + // VarDataList=new ObservableCollection(variableDatas); + // } /// /// 变量表的唯一标识符。 diff --git a/ViewModels/MainViewModel.cs b/ViewModels/MainViewModel.cs index 206e4a1..e3352b9 100644 --- a/ViewModels/MainViewModel.cs +++ b/ViewModels/MainViewModel.cs @@ -12,21 +12,37 @@ using PMSWPF.Services; namespace PMSWPF.ViewModels; +/// +/// 主视图模型,负责应用程序的主导航和数据管理。 +/// public partial class MainViewModel : ViewModelBase { - private readonly NavgatorServices _navgatorServices; private readonly DataServices _dataServices; private readonly IDialogService _dialogService; private readonly ILogger _logger; - - - [ObservableProperty] private ViewModelBase currentViewModel; - [ObservableProperty] private ObservableCollection _menus; - private readonly MenuRepository _menuRepository; + private readonly NavgatorServices _navgatorServices; private readonly VarTableRepository _varTableRepository; + /// + /// 当前显示的视图模型。 + /// + [ObservableProperty] + private ViewModelBase currentViewModel; + /// + /// 应用程序的菜单列表。 + /// + [ObservableProperty] + private ObservableCollection _menus; + + /// + /// 初始化 类的新实例。 + /// + /// 导航服务。 + /// 数据服务。 + /// 对话框服务。 + /// 日志记录器。 public MainViewModel(NavgatorServices navgatorServices, DataServices dataServices, IDialogService dialogService, ILogger logger) { @@ -35,7 +51,7 @@ public partial class MainViewModel : ViewModelBase _dialogService = dialogService; _logger = logger; _varTableRepository = new VarTableRepository(); - _menuRepository= new MenuRepository(); + _menuRepository = new MenuRepository(); _navgatorServices.OnViewModelChanged += () => { CurrentViewModel = _navgatorServices.CurrentViewModel; }; @@ -48,63 +64,9 @@ public partial class MainViewModel : ViewModelBase } /// - /// 菜单点击切换 + /// 添加变量表。 /// - /// - public async Task MenuSelectionChanged(MenuBean menu) - { - try - { - switch (menu.Type) - { - case MenuType.MainMenu: - menu.ViewModel = DataServicesHelper.GetMainViewModel(menu.Name); - break; - case MenuType.DeviceMenu: - menu.ViewModel = App.Current.Services.GetRequiredService(); - menu.Data = _dataServices.Devices.FirstOrDefault(d => d.Id == menu.DataId); - break; - case MenuType.VariableTableMenu: - - VariableTableViewModel varTableVM = - App.Current.Services.GetRequiredService(); - varTableVM.VariableTable = - DataServicesHelper.FindVarTableForDevice(_dataServices.Devices, menu.DataId); - - varTableVM.IsLoadCompletion = false; - menu.ViewModel = varTableVM; - menu.Data = varTableVM.VariableTable; - - break; - case MenuType.AddVariableTableMenu: - - await AddVariableTable(menu); - break; - } - - if (menu.Type == MenuType.AddVariableTableMenu) - return; - - if (menu.ViewModel != null) - { - MessageHelper.SendNavgatorMessage(menu.ViewModel); - _logger.LogInformation($"导航到:{menu.Name}"); - } - else - { - NotificationHelper.ShowMessage($"菜单:{menu.Name},没有对应的ViewModel."); - _logger.LogInformation($"菜单:{menu.Name},没有对应的ViewModel."); - } - } - catch (Exception e) - { - _logger.LogError($"菜单切换是出现了错误:{e}"); - NotificationHelper.ShowMessage($"菜单切换是出现了错误:{e.Message}", NotificationType.Error); - } - } - - - + /// 当前菜单项,用于获取父级设备信息。 private async Task AddVariableTable(MenuBean menu) { try @@ -116,7 +78,7 @@ public partial class MainViewModel : ViewModelBase NotificationHelper.ShowMessage("操作失败:无法获取有效的设备信息。", NotificationType.Error); return; } - + // 2. 显示添加变量表对话框 var varTable = await _dialogService.ShowAddVarTableDialog(); @@ -177,4 +139,60 @@ public partial class MainViewModel : ViewModelBase NotificationHelper.ShowMessage($"添加变量表时出现了错误:{e.Message}", NotificationType.Error); } } + + /// + /// 处理菜单选择变化的逻辑。 + /// + /// 被选中的菜单项。 + public async Task MenuSelectionChanged(MenuBean menu) + { + try + { + switch (menu.Type) + { + case MenuType.MainMenu: + menu.ViewModel = DataServicesHelper.GetMainViewModel(menu.Name); + break; + case MenuType.DeviceMenu: + menu.ViewModel = App.Current.Services.GetRequiredService(); + menu.Data = _dataServices.Devices.FirstOrDefault(d => d.Id == menu.DataId); + break; + case MenuType.VariableTableMenu: + + VariableTableViewModel varTableVM = + App.Current.Services.GetRequiredService(); + varTableVM.VariableTable = + DataServicesHelper.FindVarTableForDevice(_dataServices.Devices, menu.DataId); + + varTableVM.IsLoadCompletion = false; + menu.ViewModel = varTableVM; + menu.Data = varTableVM.VariableTable; + + break; + case MenuType.AddVariableTableMenu: + + await AddVariableTable(menu); + break; + } + + if (menu.Type == MenuType.AddVariableTableMenu) + return; + + if (menu.ViewModel != null) + { + MessageHelper.SendNavgatorMessage(menu.ViewModel); + _logger.LogInformation($"导航到:{menu.Name}"); + } + else + { + NotificationHelper.ShowMessage($"菜单:{menu.Name},没有对应的ViewModel."); + _logger.LogInformation($"菜单:{menu.Name},没有对应的ViewModel."); + } + } + catch (Exception e) + { + _logger.LogError($"菜单切换是出现了错误:{e}"); + NotificationHelper.ShowMessage($"菜单切换是出现了错误:{e.Message}", NotificationType.Error); + } + } } \ No newline at end of file diff --git a/ViewModels/VariableTableViewModel.cs b/ViewModels/VariableTableViewModel.cs index 0c90047..775c3ab 100644 --- a/ViewModels/VariableTableViewModel.cs +++ b/ViewModels/VariableTableViewModel.cs @@ -13,7 +13,6 @@ namespace PMSWPF.ViewModels; partial class VariableTableViewModel : ViewModelBase { - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly IDialogService _dialogService; @@ -50,6 +49,7 @@ partial class VariableTableViewModel : ViewModelBase DataVariables = new ObservableCollection(VariableTable.DataVariables); } + IsLoadCompletion = true; } @@ -62,13 +62,12 @@ partial class VariableTableViewModel : ViewModelBase var varData = await _dialogService.ShowAddVarDataDialog(); // // 如果用户取消或对话框未返回设备,则直接返回 if (varData == null) - { - // _logger.LogInformation("用户取消了添加设备操作。"); return; - } varData.VariableTableId = variableTable.Id; var addVarData = await _varDataRepository.AddAsync(varData); + DataVariables?.Add(addVarData); + variableTable.DataVariables?.Add(addVarData); var msg = addVarData.Id > 0 ? $"添加变量成功:{varData?.Name}" : $"添加变量成功:{varData.Name}"; var type = addVarData.Id > 0 ? NotificationType.Success : NotificationType.Error; NotificationHelper.ShowMessage(msg, type); @@ -78,7 +77,6 @@ partial class VariableTableViewModel : ViewModelBase string msg = $"添加变量的过程中发生了不可预期的错误:"; Logger.Error(msg + e); NotificationHelper.ShowMessage(msg + e.Message, NotificationType.Error); - } } diff --git a/Views/VariableTableView.xaml b/Views/VariableTableView.xaml index c70817f..78333d0 100644 --- a/Views/VariableTableView.xaml +++ b/Views/VariableTableView.xaml @@ -45,8 +45,7 @@ - @@ -76,12 +75,11 @@ - + - - + + - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file