diff --git a/Models/VariableData.cs b/Models/VariableData.cs index 0cc224c..028d24f 100644 --- a/Models/VariableData.cs +++ b/Models/VariableData.cs @@ -76,7 +76,8 @@ public partial class VariableData : ObservableObject /// /// 指示变量是否处于激活状态。 /// - public bool IsActive { get; set; } + [ObservableProperty] + public bool isActive; /// /// 指示变量是否被选中 diff --git a/Services/DialogService.cs b/Services/DialogService.cs index 6ed7e9a..f3fa174 100644 --- a/Services/DialogService.cs +++ b/Services/DialogService.cs @@ -203,4 +203,16 @@ public class DialogService :IDialogService } return null; } + + public async Task ShowIsActiveDialog(bool currentIsActive) + { + var vm = new IsActiveDialogViewModel(currentIsActive); + var dialog = new IsActiveDialog(vm); + var result = await dialog.ShowAsync(); + if (result == ContentDialogResult.Primary) + { + return vm.SelectedIsActive; + } + return null; + } } \ No newline at end of file diff --git a/Services/IDialogService.cs b/Services/IDialogService.cs index b9f7120..7a5a17b 100644 --- a/Services/IDialogService.cs +++ b/Services/IDialogService.cs @@ -24,4 +24,5 @@ public interface IDialogService Task ShowMqttSelectionDialog(); Task> ShowOpcUaImportDialog(string endpointUrl); Task ShowOpcUaUpdateTypeDialog(); + Task ShowIsActiveDialog(bool currentIsActive); } \ No newline at end of file diff --git a/ViewModels/Dialogs/IsActiveDialogViewModel.cs b/ViewModels/Dialogs/IsActiveDialogViewModel.cs index 1628186..df99d59 100644 --- a/ViewModels/Dialogs/IsActiveDialogViewModel.cs +++ b/ViewModels/Dialogs/IsActiveDialogViewModel.cs @@ -15,9 +15,12 @@ public partial class IsActiveDialogViewModel : ObservableObject } [RelayCommand] - private void SelectIsActive(bool isActive) + private void SelectIsActive(string isActiveString) { - SelectedIsActive = isActive; + if (bool.TryParse(isActiveString, out bool isActive)) + { + SelectedIsActive = isActive; + } } [RelayCommand] diff --git a/ViewModels/VariableTableViewModel.cs b/ViewModels/VariableTableViewModel.cs index 9b00ef9..ec162e6 100644 --- a/ViewModels/VariableTableViewModel.cs +++ b/ViewModels/VariableTableViewModel.cs @@ -130,7 +130,8 @@ partial class VariableTableViewModel : ViewModelBase /// 初始化服务、数据仓库和变量数据集合视图。 /// /// 对话服务接口的实例。 - public VariableTableViewModel(IMapper mapper,IDialogService dialogService,VarTableRepository varTableRepository,VarDataRepository varDataRepository) + public VariableTableViewModel(IMapper mapper, IDialogService dialogService, VarTableRepository varTableRepository, + VarDataRepository varDataRepository) { _mapper = mapper; _dialogService = dialogService; @@ -546,7 +547,8 @@ partial class VariableTableViewModel : ViewModelBase [RelayCommand] public async Task ChangePollLevel(IList variablesToChange) { - var validVariables = variablesToChange?.OfType().ToList(); + var validVariables = variablesToChange?.OfType() + .ToList(); // 检查是否有变量被选中 if (validVariables == null || !validVariables.Any()) @@ -582,7 +584,8 @@ partial class VariableTableViewModel : ViewModelBase public async Task ModifyOpcUaUpdateType(IList variablesToChange) { // 过滤出有效的VariableData对象 - var validVariables = variablesToChange?.OfType().ToList(); + var validVariables = variablesToChange?.OfType() + .ToList(); if (validVariables == null || !validVariables.Any()) { @@ -615,7 +618,8 @@ partial class VariableTableViewModel : ViewModelBase [RelayCommand] public async Task AddMqttServerToVariables(IList variablesToAddMqtt) { - var validVariables = variablesToAddMqtt?.OfType().ToList(); + var validVariables = variablesToAddMqtt?.OfType() + .ToList(); // 检查是否有变量被选中 if (validVariables == null || !validVariables.Any()) @@ -662,6 +666,55 @@ partial class VariableTableViewModel : ViewModelBase } } + /// + /// 修改选定变量的启用状态。 + /// + /// 要修改启用状态的变量数据列表。 + [RelayCommand] + public async Task ModifyIsActive(IList variablesToChange) + { + var validVariables = variablesToChange?.OfType() + .ToList(); + + if (validVariables == null || !validVariables.Any()) + { + NotificationHelper.ShowInfo("请选择要修改启用状态的变量"); + return; + } + + // 假设所有选中的变量都应该被设置为相同的状态,取第一个变量的当前状态的反值 + var currentIsActive = validVariables.First() + .IsActive; + var newIsActive = !currentIsActive; + + var confirm = await _dialogService.ShowIsActiveDialog(newIsActive); + + if (confirm.HasValue && confirm.Value == newIsActive) + { + foreach (var variable in validVariables) + { + variable.IsActive = newIsActive; + } + + await _varDataRepository.UpdateAsync(validVariables); + + // 更新界面 + foreach (var variable in validVariables) + { + var displayVar = DataVariables.FirstOrDefault(v => v.Id == variable.Id); + if (displayVar != null) + displayVar.IsActive = newIsActive; + } + + + NotificationHelper.ShowSuccess($"已成功将 {validVariables.Count} 个变量的启用状态修改为 {newIsActive}"); + } + else + { + NotificationHelper.ShowInfo("操作已取消或状态未改变。"); + } + } + /// /// 当变量表的启用/禁用状态改变时调用。 /// 更新数据库中变量表的激活状态,并显示相应的通知。 diff --git a/Views/Dialogs/IsActiveDialog.xaml b/Views/Dialogs/IsActiveDialog.xaml index f666194..14113bf 100644 --- a/Views/Dialogs/IsActiveDialog.xaml +++ b/Views/Dialogs/IsActiveDialog.xaml @@ -5,6 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:controls="http://schemas.inkore.net/lib/ui/wpf/modern" xmlns:vm="clr-namespace:PMSWPF.ViewModels.Dialogs" + xmlns:vc="clr-namespace:PMSWPF.ValueConverts" mc:Ignorable="d" d:DataContext="{d:DesignInstance vm:IsActiveDialogViewModel}" Title="修改激活状态" @@ -12,11 +13,16 @@ SecondaryButtonText="取消" PrimaryButtonClick="ContentDialog_PrimaryButtonClick" SecondaryButtonClick="ContentDialog_SecondaryButtonClick"> + + + - - - + + + + + \ No newline at end of file diff --git a/Views/VariableTableView.xaml b/Views/VariableTableView.xaml index b59cd03..17fdbb0 100644 --- a/Views/VariableTableView.xaml +++ b/Views/VariableTableView.xaml @@ -224,6 +224,13 @@ + + + + +