添加批量修改激活状态
This commit is contained in:
@@ -76,7 +76,8 @@ public partial class VariableData : ObservableObject
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指示变量是否处于激活状态。
|
/// 指示变量是否处于激活状态。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsActive { get; set; }
|
[ObservableProperty]
|
||||||
|
public bool isActive;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指示变量是否被选中
|
/// 指示变量是否被选中
|
||||||
|
|||||||
@@ -203,4 +203,16 @@ public class DialogService :IDialogService
|
|||||||
}
|
}
|
||||||
return null;
|
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<Mqtt?> ShowMqttSelectionDialog();
|
||||||
Task<List<VariableData>> ShowOpcUaImportDialog(string endpointUrl);
|
Task<List<VariableData>> ShowOpcUaImportDialog(string endpointUrl);
|
||||||
Task<OpcUaUpdateType?> ShowOpcUaUpdateTypeDialog();
|
Task<OpcUaUpdateType?> ShowOpcUaUpdateTypeDialog();
|
||||||
|
Task<bool?> ShowIsActiveDialog(bool currentIsActive);
|
||||||
}
|
}
|
||||||
@@ -15,9 +15,12 @@ public partial class IsActiveDialogViewModel : ObservableObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void SelectIsActive(bool isActive)
|
private void SelectIsActive(string isActiveString)
|
||||||
{
|
{
|
||||||
SelectedIsActive = isActive;
|
if (bool.TryParse(isActiveString, out bool isActive))
|
||||||
|
{
|
||||||
|
SelectedIsActive = isActive;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
|
|||||||
@@ -130,7 +130,8 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
/// 初始化服务、数据仓库和变量数据集合视图。
|
/// 初始化服务、数据仓库和变量数据集合视图。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dialogService">对话服务接口的实例。</param>
|
/// <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;
|
_mapper = mapper;
|
||||||
_dialogService = dialogService;
|
_dialogService = dialogService;
|
||||||
@@ -546,7 +547,8 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public async Task ChangePollLevel(IList<object> variablesToChange)
|
public async Task ChangePollLevel(IList<object> variablesToChange)
|
||||||
{
|
{
|
||||||
var validVariables = variablesToChange?.OfType<VariableData>().ToList();
|
var validVariables = variablesToChange?.OfType<VariableData>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
// 检查是否有变量被选中
|
// 检查是否有变量被选中
|
||||||
if (validVariables == null || !validVariables.Any())
|
if (validVariables == null || !validVariables.Any())
|
||||||
@@ -582,7 +584,8 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
public async Task ModifyOpcUaUpdateType(IList<object> variablesToChange)
|
public async Task ModifyOpcUaUpdateType(IList<object> variablesToChange)
|
||||||
{
|
{
|
||||||
// 过滤出有效的VariableData对象
|
// 过滤出有效的VariableData对象
|
||||||
var validVariables = variablesToChange?.OfType<VariableData>().ToList();
|
var validVariables = variablesToChange?.OfType<VariableData>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
if (validVariables == null || !validVariables.Any())
|
if (validVariables == null || !validVariables.Any())
|
||||||
{
|
{
|
||||||
@@ -615,7 +618,8 @@ partial class VariableTableViewModel : ViewModelBase
|
|||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public async Task AddMqttServerToVariables(IList<object> variablesToAddMqtt)
|
public async Task AddMqttServerToVariables(IList<object> variablesToAddMqtt)
|
||||||
{
|
{
|
||||||
var validVariables = variablesToAddMqtt?.OfType<VariableData>().ToList();
|
var validVariables = variablesToAddMqtt?.OfType<VariableData>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
// 检查是否有变量被选中
|
// 检查是否有变量被选中
|
||||||
if (validVariables == null || !validVariables.Any())
|
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>
|
/// <summary>
|
||||||
/// 当变量表的启用/禁用状态改变时调用。
|
/// 当变量表的启用/禁用状态改变时调用。
|
||||||
/// 更新数据库中变量表的激活状态,并显示相应的通知。
|
/// 更新数据库中变量表的激活状态,并显示相应的通知。
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:controls="http://schemas.inkore.net/lib/ui/wpf/modern"
|
xmlns:controls="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||||
xmlns:vm="clr-namespace:PMSWPF.ViewModels.Dialogs"
|
xmlns:vm="clr-namespace:PMSWPF.ViewModels.Dialogs"
|
||||||
|
xmlns:vc="clr-namespace:PMSWPF.ValueConverts"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DataContext="{d:DesignInstance vm:IsActiveDialogViewModel}"
|
d:DataContext="{d:DesignInstance vm:IsActiveDialogViewModel}"
|
||||||
Title="修改激活状态"
|
Title="修改激活状态"
|
||||||
@@ -12,11 +13,16 @@
|
|||||||
SecondaryButtonText="取消"
|
SecondaryButtonText="取消"
|
||||||
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
|
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
|
||||||
SecondaryButtonClick="ContentDialog_SecondaryButtonClick">
|
SecondaryButtonClick="ContentDialog_SecondaryButtonClick">
|
||||||
|
<controls:ContentDialog.Resources>
|
||||||
|
<vc:NullableBooleanConverter x:Key="NullableBooleanConverter" />
|
||||||
|
</controls:ContentDialog.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<StackPanel Orientation="Vertical" Margin="10">
|
<StackPanel Orientation="Vertical" Margin="10">
|
||||||
<TextBlock Text="请选择新的激活状态:" Margin="0,0,0,10" FontWeight="Bold"/>
|
<StackPanel Orientation="Horizontal">
|
||||||
<RadioButton Content="启用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=True}" Command="{Binding SelectIsActiveCommand}" CommandParameter="True" Margin="0,0,0,5"/>
|
<RadioButton FontSize="16" Content="启用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=True}" Command="{Binding SelectIsActiveCommand}" CommandParameter="True" Margin="10 5"/>
|
||||||
<RadioButton Content="停用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=False}" Command="{Binding SelectIsActiveCommand}" CommandParameter="False"/>
|
<RadioButton FontSize="16" Content="停用" IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=False}" Command="{Binding SelectIsActiveCommand}" CommandParameter="False" Margin="10 5"/>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
</controls:ContentDialog>
|
</controls:ContentDialog>
|
||||||
@@ -224,6 +224,13 @@
|
|||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</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服务器"
|
<MenuItem Header="添加MQTT服务器"
|
||||||
Command="{Binding AddMqttServerToVariablesCommand}"
|
Command="{Binding AddMqttServerToVariablesCommand}"
|
||||||
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
|
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
|
||||||
|
|||||||
Reference in New Issue
Block a user