1 feat: 添加变量导入模板配置和工厂模式实现

2
    3 -
      在AppSettings中添加VariableImportTemplate配置项,用于设置变量导入的默认参数(IsActive、PollingIn
      terval、IsHistoryEnabled、HistoryDeadband)
    4 - 修改AppSettings.Load()方法,优化配置加载逻辑
    5 -
      实现IVariableItemViewModelFactory和VariableItemViewModelFactory,使用工厂模式创建VariableItemVie
      wModel实例
    6 - 在ImportOpcUaDialogViewModel中使用工厂创建VariableItemViewModel实例,以应用默认配置
    7 -
      在SettingViewModel和SettingView中添加变量导入设置界面和相关属性(VariablePollingInterval、Variab
      leIsActive、VariableIsHistoryEnabled、VariableHistoryDeadband)
    8 - 移除VariableItemViewModel构造函数中的轮询间隔默认值设置,改由工厂模式设置
    9 - 优化SplashViewModel中配置加载逻辑
   10 - 移除MainView.xaml.cs中已注释的代码
   11 - 调整VariableTableView.xaml的UI布局和菜单结构
   12 - 注册IVariableItemViewModelFactory服务

  这些修改主要实现了几个关键功能:
   1. 引入了工厂模式来创建VariableItemViewModel实例,确保所有新创建的变量项都应用默认配置
   2. 添加了变量导入模板设置,用户可以在设置界面自定义导入变量的默认属性
   3. 对相关UI进行了调整和优化
This commit is contained in:
2025-10-04 20:46:39 +08:00
parent ec1f94a898
commit d4562e600e
11 changed files with 249 additions and 133 deletions

View File

@@ -41,85 +41,86 @@
<DockPanel>
<ikw:SimpleStackPanel DockPanel.Dock="Top" Margin="10" >
<Grid >
<ikw:SimpleStackPanel Margin="10" DockPanel.Dock="Top">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 返回设备详情按钮 -->
<Button Grid.Column="0"
Command="{Binding NavigateToDeviceDetailCommand}"
Style="{StaticResource ButtonDefault}"
ToolTip="返回设备详情"
Margin="0,0,10,0">
<!-- 返回设备详情按钮 -->
<Button
Grid.Column="0"
Margin="0,0,10,0"
Command="{Binding NavigateToDeviceDetailCommand}"
Style="{StaticResource ButtonDefault}"
ToolTip="返回设备详情">
<Button.Content>
<StackPanel Orientation="Horizontal">
<ui:FontIcon
Icon="{x:Static ui:SegoeFluentIcons.ArrowLeft8}" />
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.ArrowLeft8}" />
</StackPanel>
</Button.Content>
</Button>
<!-- 操作菜单 -->
<controls:CommandBar Grid.Column="1"
<controls:CommandBar
x:Name="PrimaryCommandBar"
Grid.Column="1"
DefaultLabelPosition="Right"
IsOpen="False">
<ui:AppBarButton Command="{Binding AddVariableCommand}" Label="添加变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Add}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton Command="{Binding AddVariableCommand}" Label="添加变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Add}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton Command="{Binding UpdateVariableCommand}" Label="编辑变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton Command="{Binding UpdateVariableCommand}" Label="编辑变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton Command="{Binding DeleteVariableCommand}" Label="删除变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Delete}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton Command="{Binding DeleteVariableCommand}" Label="删除变量">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Delete}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton
Command="{Binding ImprotFromTiaVarTableCommand}"
Label="从TIA变量表导入"
Visibility="{Binding IsS7ProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton
Command="{Binding ImportFromOpcUaServerCommand}"
Label="从OPC UA服务器导入"
Visibility="{Binding IsOpcUaProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton x:Name="ShareButton" Label="Share">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Share}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:CommandBar.SecondaryCommands>
<ui:AppBarButton
x:Name="SettingsButton"
Icon="Setting"
Label="Settings" />
</ui:CommandBar.SecondaryCommands>
Command="{Binding ImprotFromTiaVarTableCommand}"
Label="从TIA变量表导入"
Visibility="{Binding IsS7ProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
</ui:AppBarButton.Icon>
</controls:CommandBar>
</Grid>
</ui:AppBarButton>
<ui:AppBarButton
Command="{Binding ImportFromOpcUaServerCommand}"
Label="从OPC UA服务器导入"
Visibility="{Binding IsOpcUaProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Import}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:AppBarButton x:Name="ShareButton" Label="Share">
<ui:AppBarButton.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Share}" />
</ui:AppBarButton.Icon>
</ui:AppBarButton>
<ui:CommandBar.SecondaryCommands>
<ui:AppBarButton
x:Name="SettingsButton"
Icon="Setting"
Label="Settings" />
</ui:CommandBar.SecondaryCommands>
</controls:CommandBar>
</Grid>
<!-- 变量表的名称描述等信息 -->
<ikw:SimpleStackPanel
Margin="5"
@@ -148,7 +149,7 @@
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" />
</ikw:SimpleStackPanel>
</ikw:SimpleStackPanel>
<DataGrid
x:Name="BasicGridView"
@@ -206,9 +207,7 @@
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
Command="{Binding ModifyConversionFormulaCommand}"
Header="修改数值转换公式">
<MenuItem Command="{Binding ModifyConversionFormulaCommand}" Header="修改数值转换公式">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</MenuItem.Icon>
@@ -235,7 +234,7 @@
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Add}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
Command="{Binding ChangeHistorySettingsCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
@@ -244,18 +243,14 @@
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
Command="{Binding ChangeAlarmSettingsCommand}"
Header="修改报警设置">
<MenuItem Command="{Binding ChangeAlarmSettingsCommand}" Header="修改报警设置">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
Command="{Binding ToHistoryCommand}"
Header="查看历史记录">
<MenuItem Command="{Binding ToHistoryCommand}" Header="查看历史记录">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.History}" />
</MenuItem.Icon>
@@ -319,7 +314,7 @@
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridCheckBoxColumn Binding="{Binding IsActive}" Header="启用" />
<DataGridTemplateColumn Header="轮询间隔(毫秒)" SortMemberPath="PollingInterval">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
@@ -346,13 +341,13 @@
Header="更新时间"
IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding ConversionFormula}" Header="转换规则" />
<DataGridCheckBoxColumn Binding="{Binding IsHistoryEnabled}" Header="保存" />
<DataGridTextColumn Binding="{Binding HistoryDeadband}" Header="保存范围" />
<DataGridCheckBoxColumn Binding="{Binding IsAlarmEnabled}" Header="报警" />
<DataGridTextColumn Binding="{Binding AlarmMinValue}" Header="报警最小值" />
<DataGridTextColumn Binding="{Binding AlarmMaxValue}" Header="报警最大值" />
</DataGrid.Columns>
</DataGrid.Columns>
</DataGrid>
</DockPanel>