完成修改选定变量的启用状态更改
This commit is contained in:
@@ -21,6 +21,7 @@ namespace DMS.WPF.Services
|
||||
{ typeof(ImportOpcUaDialogViewModel), typeof(ImportOpcUaDialog) },
|
||||
{ typeof(VariableDialogViewModel), typeof(VariableDialog) },
|
||||
{ typeof(PollLevelDialogViewModel), typeof(PollLevelDialog) },
|
||||
{ typeof(IsActiveDialogViewModel), typeof(IsActiveDialog) },
|
||||
// { typeof(MqttDialogViewModel), typeof(MqttDialog) }, // Add other mappings here
|
||||
// ... other dialogs
|
||||
};
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
using System;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using DMS.Core.Enums;
|
||||
|
||||
namespace DMS.WPF.ViewModels.Dialogs;
|
||||
|
||||
public partial class IsActiveDialogViewModel : ObservableObject
|
||||
namespace DMS.WPF.ViewModels.Dialogs
|
||||
{
|
||||
[ObservableProperty]
|
||||
private bool? _selectedIsActive;
|
||||
|
||||
public IsActiveDialogViewModel(bool? currentIsActive)
|
||||
public partial class IsActiveDialogViewModel : DialogViewModelBase<bool?>
|
||||
{
|
||||
_selectedIsActive = currentIsActive;
|
||||
}
|
||||
[ObservableProperty]
|
||||
private bool? _selectedIsActive;
|
||||
|
||||
[RelayCommand]
|
||||
private void SelectIsActive(string isActiveString)
|
||||
{
|
||||
if (bool.TryParse(isActiveString, out bool isActive))
|
||||
public IsActiveDialogViewModel(bool currentIsActive)
|
||||
{
|
||||
SelectedIsActive = isActive;
|
||||
SelectedIsActive = currentIsActive;
|
||||
Title = "修改启用状态";
|
||||
PrimaryButText = "确定";
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void PrimaryButton()
|
||||
{
|
||||
Close(SelectedIsActive);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void CancleButton()
|
||||
{
|
||||
Close(null);
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Cancel()
|
||||
{
|
||||
SelectedIsActive = null;
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ using DMS.WPF.ViewModels.Items;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using ObservableCollections;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace DMS.WPF.ViewModels;
|
||||
|
||||
@@ -638,43 +640,44 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
|
||||
/// </summary>
|
||||
/// <param name="variablesToChange">要修改启用状态的变量数据列表。</param>
|
||||
[RelayCommand]
|
||||
public async Task ModifyIsActive(IList<object> variablesToChange)
|
||||
public async Task ChangeIsActive()
|
||||
{
|
||||
// var validVariables = variablesToChange?.OfType<Variable>()
|
||||
// .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);
|
||||
//
|
||||
// // 更新界面
|
||||
// await RefreshDataView();
|
||||
//
|
||||
//
|
||||
// NotificationHelper.ShowSuccess($"已成功将 {validVariables.Count} 个变量的启用状态修改为 {newIsActive}");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// NotificationHelper.ShowInfo("操作已取消或状态未改变。");
|
||||
// }
|
||||
// 检查是否有变量被选中
|
||||
if (SelectedVariables.Count == 0)
|
||||
{
|
||||
NotificationHelper.ShowInfo("请选择要修改启用状态的变量");
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取选中的变量列表
|
||||
var validVariables = SelectedVariables.Cast<VariableItemViewModel>().ToList();
|
||||
|
||||
// 显示启用状态选择对话框,并传入第一个变量的当前启用状态作为默认值
|
||||
IsActiveDialogViewModel viewModel = new IsActiveDialogViewModel(validVariables.First().IsActive);
|
||||
var newIsActive = await _dialogService.ShowDialogAsync(viewModel);
|
||||
if (newIsActive.HasValue)
|
||||
{
|
||||
// 更新所有选定变量的启用状态和修改状态
|
||||
foreach (var variable in validVariables)
|
||||
{
|
||||
variable.IsActive = newIsActive.Value;
|
||||
variable.UpdatedAt = DateTime.Now;
|
||||
}
|
||||
|
||||
// 批量更新数据库中的变量数据
|
||||
var variableDtos = _mapper.Map<List<VariableDto>>(validVariables);
|
||||
var result = await _variableAppService.UpdateVariablesAsync(variableDtos);
|
||||
|
||||
if (result > 0)
|
||||
{
|
||||
// 显示成功通知
|
||||
NotificationHelper.ShowSuccess($"已成功更新 {validVariables.Count} 个变量的启用状态");
|
||||
}
|
||||
else
|
||||
{
|
||||
NotificationHelper.ShowError("更新启用状态失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,28 +1,37 @@
|
||||
<controls:ContentDialog x:Class="DMS.WPF.Views.Dialogs.IsActiveDialog"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:controls="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||
xmlns:vm="clr-namespace:DMS.WPF.ViewModels.Dialogs"
|
||||
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
|
||||
mc:Ignorable="d"
|
||||
d:DataContext="{d:DesignInstance vm:IsActiveDialogViewModel}"
|
||||
Title="修改激活状态"
|
||||
PrimaryButtonText="确定"
|
||||
SecondaryButtonText="取消"
|
||||
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
|
||||
SecondaryButtonClick="ContentDialog_SecondaryButtonClick">
|
||||
<controls:ContentDialog
|
||||
x:Class="DMS.WPF.Views.Dialogs.IsActiveDialog"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:controls="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
|
||||
xmlns:vm="clr-namespace:DMS.WPF.ViewModels.Dialogs"
|
||||
Title="{Binding Title}"
|
||||
d:DataContext="{d:DesignInstance vm:IsActiveDialogViewModel}"
|
||||
CloseButtonCommand="{Binding CancleButtonCommand}"
|
||||
CloseButtonText="取消"
|
||||
PrimaryButtonCommand="{Binding PrimaryButtonCommand}"
|
||||
PrimaryButtonText="{Binding PrimaryButText}"
|
||||
mc:Ignorable="d">
|
||||
<controls:ContentDialog.Resources>
|
||||
<valueConverts:NullableBooleanConverter x:Key="NullableBooleanConverter" />
|
||||
</controls:ContentDialog.Resources>
|
||||
<Grid>
|
||||
<StackPanel Orientation="Vertical" Margin="10">
|
||||
<StackPanel Margin="10" Orientation="Vertical">
|
||||
<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"/>
|
||||
<RadioButton
|
||||
Margin="10,5"
|
||||
Content="启用"
|
||||
FontSize="16"
|
||||
IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=True}" />
|
||||
<RadioButton
|
||||
Margin="10,5"
|
||||
Content="停用"
|
||||
FontSize="16"
|
||||
IsChecked="{Binding SelectedIsActive, Mode=TwoWay, Converter={StaticResource NullableBooleanConverter}, ConverterParameter=False}" />
|
||||
</StackPanel>
|
||||
|
||||
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</controls:ContentDialog>
|
||||
@@ -5,28 +5,25 @@ namespace DMS.WPF.Views.Dialogs;
|
||||
|
||||
public partial class IsActiveDialog : ContentDialog
|
||||
{
|
||||
public IsActiveDialogViewModel ViewModel { get; }
|
||||
|
||||
public IsActiveDialog(IsActiveDialogViewModel viewModel)
|
||||
public IsActiveDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
ViewModel = viewModel;
|
||||
DataContext = ViewModel;
|
||||
}
|
||||
|
||||
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
||||
{
|
||||
// 确认按钮点击时,ViewModel.SelectedIsActive 已经通过绑定更新
|
||||
// 如果用户没有选择任何选项,可以阻止关闭对话框
|
||||
if (!ViewModel.SelectedIsActive.HasValue)
|
||||
{
|
||||
args.Cancel = true;
|
||||
}
|
||||
//if (!ViewModel.SelectedIsActive.HasValue)
|
||||
//{
|
||||
// args.Cancel = true;
|
||||
//}
|
||||
}
|
||||
|
||||
private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
|
||||
{
|
||||
// 取消按钮点击时,将 SelectedIsActive 设置为 null
|
||||
ViewModel.SelectedIsActive = null;
|
||||
//ViewModel.SelectedIsActive = null;
|
||||
}
|
||||
}
|
||||
@@ -196,10 +196,7 @@
|
||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Command="{Binding ModifyIsActiveCommand}"
|
||||
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
|
||||
Header="修改启用状态">
|
||||
<MenuItem Command="{Binding ChangeIsActiveCommand}" Header="修改启用状态">
|
||||
<MenuItem.Icon>
|
||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
|
||||
</MenuItem.Icon>
|
||||
|
||||
Reference in New Issue
Block a user