添加批量修改激活状态
This commit is contained in:
@@ -76,7 +76,8 @@ public partial class VariableData : ObservableObject
|
||||
/// <summary>
|
||||
/// 指示变量是否处于激活状态。
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; }
|
||||
[ObservableProperty]
|
||||
public bool isActive;
|
||||
|
||||
/// <summary>
|
||||
/// 指示变量是否被选中
|
||||
|
||||
@@ -203,4 +203,16 @@ public class DialogService :IDialogService
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<bool?> 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;
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,5 @@ public interface IDialogService
|
||||
Task<Mqtt?> ShowMqttSelectionDialog();
|
||||
Task<List<VariableData>> ShowOpcUaImportDialog(string endpointUrl);
|
||||
Task<OpcUaUpdateType?> ShowOpcUaUpdateTypeDialog();
|
||||
Task<bool?> ShowIsActiveDialog(bool currentIsActive);
|
||||
}
|
||||
@@ -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]
|
||||
|
||||
@@ -130,7 +130,8 @@ partial class VariableTableViewModel : ViewModelBase
|
||||
/// 初始化服务、数据仓库和变量数据集合视图。
|
||||
/// </summary>
|
||||
/// <param name="dialogService">对话服务接口的实例。</param>
|
||||
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<object> variablesToChange)
|
||||
{
|
||||
var validVariables = variablesToChange?.OfType<VariableData>().ToList();
|
||||
var validVariables = variablesToChange?.OfType<VariableData>()
|
||||
.ToList();
|
||||
|
||||
// 检查是否有变量被选中
|
||||
if (validVariables == null || !validVariables.Any())
|
||||
@@ -582,7 +584,8 @@ partial class VariableTableViewModel : ViewModelBase
|
||||
public async Task ModifyOpcUaUpdateType(IList<object> variablesToChange)
|
||||
{
|
||||
// 过滤出有效的VariableData对象
|
||||
var validVariables = variablesToChange?.OfType<VariableData>().ToList();
|
||||
var validVariables = variablesToChange?.OfType<VariableData>()
|
||||
.ToList();
|
||||
|
||||
if (validVariables == null || !validVariables.Any())
|
||||
{
|
||||
@@ -615,7 +618,8 @@ partial class VariableTableViewModel : ViewModelBase
|
||||
[RelayCommand]
|
||||
public async Task AddMqttServerToVariables(IList<object> variablesToAddMqtt)
|
||||
{
|
||||
var validVariables = variablesToAddMqtt?.OfType<VariableData>().ToList();
|
||||
var validVariables = variablesToAddMqtt?.OfType<VariableData>()
|
||||
.ToList();
|
||||
|
||||
// 检查是否有变量被选中
|
||||
if (validVariables == null || !validVariables.Any())
|
||||
@@ -662,6 +666,55 @@ partial class VariableTableViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改选定变量的启用状态。
|
||||
/// </summary>
|
||||
/// <param name="variablesToChange">要修改启用状态的变量数据列表。</param>
|
||||
[RelayCommand]
|
||||
public async Task ModifyIsActive(IList<object> variablesToChange)
|
||||
{
|
||||
var validVariables = variablesToChange?.OfType<VariableData>()
|
||||
.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("操作已取消或状态未改变。");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当变量表的启用/禁用状态改变时调用。
|
||||
/// 更新数据库中变量表的激活状态,并显示相应的通知。
|
||||
|
||||
@@ -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">
|
||||
<controls:ContentDialog.Resources>
|
||||
<vc:NullableBooleanConverter x:Key="NullableBooleanConverter" />
|
||||
</controls:ContentDialog.Resources>
|
||||
<Grid>
|
||||
<StackPanel Orientation="Vertical" Margin="10">
|
||||
<TextBlock Text="请选择新的激活状态:" Margin="0,0,0,10" FontWeight="Bold"/>
|
||||
<RadioButton Content="启用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=True}" Command="{Binding SelectIsActiveCommand}" CommandParameter="True" Margin="0,0,0,5"/>
|
||||
<RadioButton Content="停用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=False}" Command="{Binding SelectIsActiveCommand}" CommandParameter="False"/>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<RadioButton FontSize="16" Content="启用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=True}" Command="{Binding SelectIsActiveCommand}" CommandParameter="True" Margin="10 5"/>
|
||||
<RadioButton FontSize="16" Content="停用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=False}" Command="{Binding SelectIsActiveCommand}" CommandParameter="False" Margin="10 5"/>
|
||||
</StackPanel>
|
||||
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</controls:ContentDialog>
|
||||
@@ -224,6 +224,13 @@
|
||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="修改启用状态"
|
||||
Command="{Binding ModifyIsActiveCommand}"
|
||||
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
|
||||
<MenuItem.Icon>
|
||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Header="添加MQTT服务器"
|
||||
Command="{Binding AddMqttServerToVariablesCommand}"
|
||||
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
|
||||
|
||||
Reference in New Issue
Block a user