1,重新梳理了代码,将使用多线程,并实现了批量读取变量

2,添加OpcUa更新方式的修改对话框
3,修复了一些已知的Bug
4,删除了不必要的函数
This commit is contained in:
2025-07-13 16:22:07 +08:00
parent 82634f46c0
commit 6f16a1c4e4
22 changed files with 877 additions and 704 deletions

View File

@@ -0,0 +1,23 @@
<ui:ContentDialog x:Class="PMSWPF.Views.Dialogs.OpcUaUpdateTypeDialog"
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:PMSWPF.Enums"
xmlns:extensions="clr-namespace:PMSWPF.Extensions"
xmlns:viewModels="clr-namespace:PMSWPF.ViewModels.Dialogs"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:OpcUaUpdateTypeDialogViewModel}"
Title="修改 OPC UA 更新方式"
PrimaryButtonText="确认"
CloseButtonText="取消"
DefaultButton="Primary">
<Grid>
<ComboBox Margin="15"
ItemsSource="{Binding Source={extensions:EnumBindingSource {x:Type enums:OpcUaUpdateType}}}"
SelectedValue="{Binding SelectedUpdateType}"
VerticalAlignment="Center"/>
</Grid>
</ui:ContentDialog>

View File

@@ -0,0 +1,14 @@
using iNKORE.UI.WPF.Modern.Controls;
using PMSWPF.ViewModels.Dialogs;
namespace PMSWPF.Views.Dialogs
{
public partial class OpcUaUpdateTypeDialog
{
public OpcUaUpdateTypeDialog(OpcUaUpdateTypeDialogViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
}

View File

@@ -210,13 +210,23 @@
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="修改轮询频率"
Click="ChangePollLevel_Click">
Command="{Binding ChangePollLevelCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="修改OPC UA更新方式"
Visibility="{Binding IsOpcUaProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}"
Command="{Binding ModifyOpcUaUpdateTypeCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Switch}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="添加MQTT服务器"
Click="AddMqttServerToVariables_Click">
Command="{Binding AddMqttServerToVariablesCommand}"
CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}">
<MenuItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Add}" />
</MenuItem.Icon>
@@ -271,9 +281,6 @@
Header="OPCUA节点ID"
Visibility="{Binding Source={StaticResource proxy}, Path=Data.IsOpcUaProtocolSelected, Converter={StaticResource BooleanToVisibilityConverter}}"
Binding="{Binding OpcUaNodeId}" />
<!-- <DataGridTextColumn IsReadOnly="True" -->
<!-- Header="协议类型" -->
<!-- Binding="{Binding ProtocolType}" /> -->
<DataGridTextColumn IsReadOnly="True"
Header="数据类型"
Binding="{Binding DataType}" />

View File

@@ -120,46 +120,4 @@ public partial class VariableTableView : UserControl
NotificationHelper.ShowInfo("请选择要删除的变量");
}
}
private async void ChangePollLevel_Click(object sender, RoutedEventArgs args)
{
try
{
_viewModel = (VariableTableViewModel)this.DataContext;
var selectedVariables = BasicGridView.SelectedItems.Cast<VariableData>().ToList();
if (selectedVariables.Any())
{
await _viewModel.ChangePollLevel(selectedVariables);
}
else
{
NotificationHelper.ShowInfo("请选择要修改轮询频率的变量");
}
}
catch (Exception e)
{
NotificationHelper.ShowError("修改轮询频率的过程中发生了错误:" + e.Message, e);
}
}
private async void AddMqttServerToVariables_Click(object sender, RoutedEventArgs e)
{
try
{
_viewModel = (VariableTableViewModel)this.DataContext;
var selectedVariables = BasicGridView.SelectedItems.Cast<VariableData>().ToList();
if (selectedVariables.Any())
{
await _viewModel.AddMqttServerToVariables(selectedVariables);
}
else
{
NotificationHelper.ShowInfo("请选择要添加MQTT服务器的变量");
}
}
catch (Exception ex)
{
NotificationHelper.ShowError("给变量添加MQTT服务器的过程中发生了错误" + ex.Message, ex);
}
}
}