继续修改触发器(未完成,修改一个触发器可以添加多个变量)

This commit is contained in:
2025-09-22 22:58:51 +08:00
parent 0f869cf410
commit 042bc15288
14 changed files with 434 additions and 121 deletions

View File

@@ -1,173 +1,261 @@
<ui:ContentDialog x:Class="DMS.WPF.Views.Dialogs.TriggerDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:enums="clr-namespace:DMS.Core.Models.Triggers;assembly=DMS.Core"
xmlns:vc="clr-namespace:DMS.WPF.ValueConverts"
xmlns:ex="clr-namespace:DMS.Extensions"
xmlns:converters="clr-namespace:DMS.WPF.Converters"
Title="{Binding Title}"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="600"
MinWidth="500" MinHeight="500"
PrimaryButtonText="{Binding PrimaryButText}"
CloseButtonText="取消"
PrimaryButtonCommand="{Binding SaveCommand}"
CloseButtonCommand="{Binding CancelCommand}"
DefaultButton="Primary">
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:enums="clr-namespace:DMS.Core.Models.Triggers;assembly=DMS.Core"
xmlns:vmd="clr-namespace:DMS.WPF.ViewModels.Dialogs"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:ex="clr-namespace:DMS.Extensions"
xmlns:converters="clr-namespace:DMS.WPF.Converters"
Title="{Binding Title}"
mc:Ignorable="d"
d:DesignHeight="600"
d:DesignWidth="600"
d:DataContext="{d:DesignInstance vmd:TriggerDialogViewModel}"
MinWidth="500"
MinHeight="500"
PrimaryButtonText="{Binding PrimaryButText}"
CloseButtonText="取消"
PrimaryButtonCommand="{Binding SaveCommand}"
CloseButtonCommand="{Binding CancelCommand}"
DefaultButton="Primary">
<ui:ContentDialog.Resources>
<converters:EnumToVisibilityConverter x:Key="LocalEnumToVisibilityConverter"/>
<ex:EnumBindingSource x:Key="ConditionTypeEnum" EnumType="{x:Type enums:ConditionType}" />
<ex:EnumBindingSource x:Key="ActionTypeEnum" EnumType="{x:Type enums:ActionType}" />
<converters:EnumToVisibilityConverter x:Key="LocalEnumToVisibilityConverter" />
<ex:EnumBindingSource x:Key="ConditionTypeEnum"
EnumType="{x:Type enums:ConditionType}" />
<ex:EnumBindingSource x:Key="ActionTypeEnum"
EnumType="{x:Type enums:ActionType}" />
</ui:ContentDialog.Resources>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="10">
<!-- Basic Info Section -->
<GroupBox Header="基本信息" Padding="5">
<GroupBox Header="基本信息"
Padding="5">
<StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel>
<hc:TextBox hc:InfoElement.Title="搜索变量:"
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged }">
</hc:TextBox>
<DataGrid
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding SelectedVariables}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="变量名"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</StackPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="关联变量:" Width="100" VerticalAlignment="Center"/>
<ComboBox ItemsSource="{Binding AvailableVariables}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
SelectedValue="{Binding Trigger.VariableId}"
Width="200" HorizontalAlignment="Left"/>
<Label Content="描述:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.Description, UpdateSourceTrigger=PropertyChanged}"
Width="300"
HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="描述:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.Description, UpdateSourceTrigger=PropertyChanged}"
Width="300" HorizontalAlignment="Left"/>
</DockPanel>
<CheckBox Content="激活" IsChecked="{Binding Trigger.IsActive}" Margin="0,0,0,5"/>
<CheckBox Content="激活"
IsChecked="{Binding Trigger.IsActive}"
Margin="0,0,0,5" />
</StackPanel>
</GroupBox>
<!-- Condition Section -->
<GroupBox Header="触发条件" Padding="5" Margin="0,10,0,0">
<GroupBox Header="触发条件"
Padding="5"
Margin="0,10,0,0">
<StackPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="条件类型:" Width="100" VerticalAlignment="Center"/>
<Label Content="条件类型:"
Width="100"
VerticalAlignment="Center" />
<ComboBox ItemsSource="{Binding Source={StaticResource ConditionTypeEnum}}"
SelectedItem="{Binding Trigger.Condition}"
Width="200" HorizontalAlignment="Left"/>
Width="200"
HorizontalAlignment="Left" />
</DockPanel>
<!-- Conditional Fields based on Condition Type -->
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=GreaterThan}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=GreaterThan}">
<DockPanel Margin="0,0,0,5">
<Label Content="阈值:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="阈值:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=LessThan}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=LessThan}">
<DockPanel Margin="0,0,0,5">
<Label Content="阈值:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="阈值:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=EqualTo}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=EqualTo}">
<DockPanel Margin="0,0,0,5">
<Label Content="阈值:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="阈值:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=NotEqualTo}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=NotEqualTo}">
<DockPanel Margin="0,0,0,5">
<Label Content="阈值:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="阈值:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.Threshold, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=InRange}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=InRange}">
<DockPanel Margin="0,0,0,5">
<Label Content="下限:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.LowerBound, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="下限:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.LowerBound, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="上限:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.UpperBound, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="上限:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.UpperBound, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=OutOfRange}">
<StackPanel
Visibility="{Binding Trigger.Condition, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=OutOfRange}">
<DockPanel Margin="0,0,0,5">
<Label Content="下限:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.LowerBound, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="下限:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.LowerBound, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="上限:" Width="100" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.UpperBound, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="上限:"
Width="100"
VerticalAlignment="Center" />
<TextBox Text="{Binding Trigger.UpperBound, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
</StackPanel>
</GroupBox>
<!-- Action Section -->
<GroupBox Header="触发动作" Padding="5" Margin="0,10,0,0">
<GroupBox Header="触发动作"
Padding="5"
Margin="0,10,0,0">
<StackPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="动作类型:" Width="100" VerticalAlignment="Center"/>
<Label Content="动作类型:"
Width="100"
VerticalAlignment="Center" />
<ComboBox ItemsSource="{Binding Source={StaticResource ActionTypeEnum}}"
SelectedItem="{Binding Trigger.Action}"
Width="200" HorizontalAlignment="Left"/>
Width="200"
HorizontalAlignment="Left" />
</DockPanel>
<!-- Conditional Fields based on Action Type -->
<StackPanel Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=SendEmail}">
<StackPanel
Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=SendEmail}">
<DockPanel Margin="0,0,0,5">
<Label Content="收件人 (分号分隔):" Width="150" VerticalAlignment="Top"/>
<TextBox Text="{Binding EmailRecipients, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
AcceptsReturn="True" TextWrapping="Wrap"
Width="350" Height="60" HorizontalAlignment="Left"/>
<Label Content="收件人 (分号分隔):"
Width="150"
VerticalAlignment="Top" />
<TextBox
Text="{Binding EmailRecipients, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
AcceptsReturn="True"
TextWrapping="Wrap"
Width="350"
Height="60"
HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="邮件主题模板:" Width="150" VerticalAlignment="Center"/>
<TextBox Text="{Binding EmailSubjectTemplate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Width="350" HorizontalAlignment="Left"/>
<Label Content="邮件主题模板:"
Width="150"
VerticalAlignment="Center" />
<TextBox
Text="{Binding EmailSubjectTemplate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Width="350"
HorizontalAlignment="Left" />
</DockPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="邮件内容模板:" Width="150" VerticalAlignment="Top"/>
<TextBox Text="{Binding EmailBodyTemplate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
AcceptsReturn="True" TextWrapping="Wrap"
Width="350" Height="100" HorizontalAlignment="Left"/>
<Label Content="邮件内容模板:"
Width="150"
VerticalAlignment="Top" />
<TextBox
Text="{Binding EmailBodyTemplate, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
AcceptsReturn="True"
TextWrapping="Wrap"
Width="350"
Height="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
<!-- Add placeholders for other action types if needed -->
<StackPanel Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=ActivateAlarm}">
<TextBlock Text="配置激活报警动作..." Margin="5"/>
<StackPanel
Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=ActivateAlarm}">
<TextBlock Text="配置激活报警动作..."
Margin="5" />
</StackPanel>
<StackPanel Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=WriteToLog}">
<TextBlock Text="配置写入日志动作..." Margin="5"/>
<StackPanel
Visibility="{Binding Trigger.Action, Converter={StaticResource LocalEnumToVisibilityConverter}, ConverterParameter=WriteToLog}">
<TextBlock Text="配置写入日志动作..."
Margin="5" />
</StackPanel>
</StackPanel>
</GroupBox>
<!-- Suppression Section -->
<GroupBox Header="抑制设置" Padding="5" Margin="0,10,0,0">
<GroupBox Header="抑制设置"
Padding="5"
Margin="0,10,0,0">
<StackPanel>
<DockPanel Margin="0,0,0,5">
<Label Content="抑制持续时间 (秒):" Width="150" VerticalAlignment="Center"/>
<TextBox Text="{Binding Trigger.SuppressionDuration, Converter={StaticResource NullableTimeSpanToSecondsConverter}, UpdateSourceTrigger=PropertyChanged}"
Width="100" HorizontalAlignment="Left"/>
<Label Content="抑制持续时间 (秒):"
Width="150"
VerticalAlignment="Center" />
<TextBox
Text="{Binding Trigger.SuppressionDuration, Converter={StaticResource NullableTimeSpanToSecondsConverter}, UpdateSourceTrigger=PropertyChanged}"
Width="100"
HorizontalAlignment="Left" />
</DockPanel>
</StackPanel>
</GroupBox>