diff --git a/DMS.Infrastructure/Entities/DbTriggerVariable.cs b/DMS.Infrastructure/Entities/DbTriggerVariable.cs
index 03515fc..515d819 100644
--- a/DMS.Infrastructure/Entities/DbTriggerVariable.cs
+++ b/DMS.Infrastructure/Entities/DbTriggerVariable.cs
@@ -5,6 +5,7 @@ namespace DMS.Infrastructure.Entities;
///
/// 数据库实体:表示触发器与变量的多对多关联关系。
///
+[SugarTable("TriggerVariables")]
public class DbTriggerVariable
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
diff --git a/DMS.WPF/ItemViewModel/TriggerItem.cs b/DMS.WPF/ItemViewModel/TriggerItem.cs
index f567735..d63c025 100644
--- a/DMS.WPF/ItemViewModel/TriggerItem.cs
+++ b/DMS.WPF/ItemViewModel/TriggerItem.cs
@@ -73,6 +73,6 @@ namespace DMS.WPF.ItemViewModel
///
/// 关联的变量 ID 列表
///
- public ObservableCollection VariableIds { get; } = new ObservableCollection();
+ public ObservableCollection Variables { get; } = new ObservableCollection();
}
}
\ No newline at end of file
diff --git a/DMS.WPF/ItemViewModel/VariableItem.cs b/DMS.WPF/ItemViewModel/VariableItem.cs
index 2b233ef..06bd39b 100644
--- a/DMS.WPF/ItemViewModel/VariableItem.cs
+++ b/DMS.WPF/ItemViewModel/VariableItem.cs
@@ -107,6 +107,12 @@ public partial class VariableItem : ObservableObject
///
[ObservableProperty]
private List _mqttAliases=new List();
+ ///
+ /// 获取或设置与此变量关联的触发器列表。
+ /// 一个变量可以有多个触发器。
+ ///
+ [ObservableProperty]
+ private List _triggers=new List();
///
/// 获取或设置变量的信号类型 (如:AI, DI, AO, DO)。
diff --git a/DMS.WPF/Profiles/MappingProfile.cs b/DMS.WPF/Profiles/MappingProfile.cs
index c485556..cd79193 100644
--- a/DMS.WPF/Profiles/MappingProfile.cs
+++ b/DMS.WPF/Profiles/MappingProfile.cs
@@ -1,9 +1,9 @@
using AutoMapper;
using DMS.Application.DTOs;
using DMS.Core.Models;
+using DMS.Core.Models.Triggers;
using DMS.Infrastructure.Models;
using DMS.WPF.ItemViewModel;
-using DMS.WPF.ItemViewModel;
namespace DMS.WPF.Profiles
{
@@ -15,6 +15,7 @@ namespace DMS.WPF.Profiles
.ReverseMap();
CreateMap()
.ForMember(dest => dest.MqttAliases, opt => opt.Ignore())
+ .ForMember(dest => dest.Triggers, opt => opt.Ignore())
.ReverseMap();
CreateMap()
.ReverseMap();
@@ -39,11 +40,12 @@ namespace DMS.WPF.Profiles
.ReverseMap();
CreateMap().ReverseMap();
CreateMap().ReverseMap();
-
+
// 添加触发器相关映射
- CreateMap()
- .ForMember(dest => dest.Variables, opt => opt.Ignore()) // 忽略Variables属性,因为这个通常在业务逻辑中处理
- .ReverseMap();
+ CreateMap()
+ .ForMember(dest => dest.Variables, opt => opt.Ignore());
+ CreateMap()
+ .ForMember(dest => dest.Variables, opt => opt.Ignore());
}
}
}
diff --git a/DMS.WPF/Services/TriggerDataService.cs b/DMS.WPF/Services/TriggerDataService.cs
index 813311b..921883b 100644
--- a/DMS.WPF/Services/TriggerDataService.cs
+++ b/DMS.WPF/Services/TriggerDataService.cs
@@ -61,9 +61,19 @@ public class TriggerDataService : ITriggerDataService
public void LoadAllTriggers()
{
_dataStorageService.Triggers.Clear();
- foreach (var triggerDto in _appStorageService.Triggers.Values)
+ foreach (var trigger in _appStorageService.Triggers.Values)
{
- _dataStorageService.Triggers.Add(triggerDto.Id, _mapper.Map(triggerDto));
+ TriggerItem triggerItem = _mapper.Map(trigger);
+ foreach (var variable in trigger.Variables)
+ {
+ if (_dataStorageService.Variables.TryGetValue(variable.Id,out var variableItem))
+ {
+ variableItem.Triggers.Add(triggerItem);
+ triggerItem.Variables.Add(variableItem);
+ }
+ }
+
+ _dataStorageService.Triggers.Add(trigger.Id, triggerItem);
}
}
diff --git a/DMS.WPF/ViewModels/TriggerDetailViewModel.cs b/DMS.WPF/ViewModels/TriggerDetailViewModel.cs
index 9cf89b7..d0b7242 100644
--- a/DMS.WPF/ViewModels/TriggerDetailViewModel.cs
+++ b/DMS.WPF/ViewModels/TriggerDetailViewModel.cs
@@ -33,11 +33,6 @@ namespace DMS.WPF.ViewModels
[ObservableProperty]
private TriggerItem _currentTrigger;
- ///
- /// 与当前触发器关联的变量数据集合。
- ///
- [ObservableProperty]
- private ObservableCollection _associatedVariables;
[ObservableProperty]
private IList _selectedVariables = new ArrayList();
@@ -166,15 +161,6 @@ namespace DMS.WPF.ViewModels
{
CurrentTrigger = triggerItem;
- // 初始化关联变量列表 - 从VariableIds创建VariableItems列表
- AssociatedVariables = new ObservableCollection();
- foreach (var variableId in CurrentTrigger.VariableIds)
- {
- if (_dataStorageService.Variables.TryGetValue(variableId, out var variableItem))
- {
- AssociatedVariables.Add(variableItem);
- }
- }
}
return Task.CompletedTask;
diff --git a/DMS.WPF/ViewModels/VariableTableViewModel.cs b/DMS.WPF/ViewModels/VariableTableViewModel.cs
index 28d7d4e..1d4d48b 100644
--- a/DMS.WPF/ViewModels/VariableTableViewModel.cs
+++ b/DMS.WPF/ViewModels/VariableTableViewModel.cs
@@ -532,8 +532,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
// 批量更新数据库中的变量数据
- var variableDtos = _mapper.Map>(validVariables);
- var result = await _variableManagementService.UpdateVariablesAsync(variableDtos);
+ var result = await _variableManagementService.UpdateVariablesAsync(_mapper.Map>(validVariables));
if (result > 0)
{
diff --git a/DMS.WPF/Views/TriggerDetailView.xaml b/DMS.WPF/Views/TriggerDetailView.xaml
index 29fda90..e89c903 100644
--- a/DMS.WPF/Views/TriggerDetailView.xaml
+++ b/DMS.WPF/Views/TriggerDetailView.xaml
@@ -9,7 +9,8 @@
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:converters="clr-namespace:DMS.WPF.Converters"
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
- xmlns:triggers="clr-namespace:DMS.Core.Models.Triggers;assembly=DMS.Core"
+ xmlns:vm="clr-namespace:DMS.WPF.ViewModels"
+ d:DataContext="{d:DesignInstance vm:TriggerDetailViewModel}"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
@@ -377,7 +378,7 @@
CanUserAddRows="False"
CanUserDeleteRows="False"
IsReadOnly="True"
- ItemsSource="{Binding AssociatedVariables}"
+ ItemsSource="{Binding CurrentTrigger.Variables}"
SelectionMode="Extended">