feat(mqtt): 实现MQTT别名批量修改功能
主要改动: - 在 MqttServerDetailView 中,允许用户在关联变量列表中进行多项选择。 - 修改了 ModifyAlias 命令,使其能够处理多个选中项,并调用批量编辑对话框。 - 新增了 MqttAliasBatchEditDialogViewModel 的构造函数,使其可以接收并编辑已存在的别名列表。 - 通过 SelectedItemsBehavior 辅助类,实现了 DataGrid 中 SelectedItems 的双向绑定。 - 更新了相关视图和视图模型,以支持新的批量操作流程。
This commit is contained in:
@@ -16,7 +16,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
|||||||
public partial class MqttAliasBatchEditDialogViewModel : DialogViewModelBase<List<MqttAliasItem>>
|
public partial class MqttAliasBatchEditDialogViewModel : DialogViewModelBase<List<MqttAliasItem>>
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private ObservableCollection<MqttAliasItem> _variableMqttAliases = new();
|
private ObservableCollection<MqttAliasItem> _currentMqttAliases = new();
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private MqttServerItem _selectedMqttServer;
|
private MqttServerItem _selectedMqttServer;
|
||||||
@@ -26,15 +26,31 @@ namespace DMS.WPF.ViewModels.Dialogs
|
|||||||
MqttServerItem mqttServer)
|
MqttServerItem mqttServer)
|
||||||
{
|
{
|
||||||
_selectedMqttServer = mqttServer;
|
_selectedMqttServer = mqttServer;
|
||||||
InitializeVariableMqttAliases(variables);
|
InitializeCurrentMqttAliases(variables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MqttAliasBatchEditDialogViewModel(List<MqttAliasItem> mqttAliasItems)
|
||||||
|
{
|
||||||
|
foreach (var item in mqttAliasItems)
|
||||||
|
{
|
||||||
|
MqttAliasItem aliasItem = new MqttAliasItem();
|
||||||
|
aliasItem.Id = item.Id;
|
||||||
|
aliasItem.Alias = item.Alias;
|
||||||
|
aliasItem.VariableId = item.VariableId;
|
||||||
|
aliasItem.MqttServerId = item.MqttServerId;
|
||||||
|
aliasItem.Variable = item.Variable;
|
||||||
|
aliasItem.MqttServerName = item.MqttServerName;
|
||||||
|
aliasItem.MqttServer = item.MqttServer;
|
||||||
|
CurrentMqttAliases.Add(aliasItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化变量MQTT别名列表
|
/// 初始化变量MQTT别名列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeVariableMqttAliases(List<VariableItem> variables)
|
private void InitializeCurrentMqttAliases(List<VariableItem> variables)
|
||||||
{
|
{
|
||||||
VariableMqttAliases.Clear();
|
CurrentMqttAliases.Clear();
|
||||||
|
|
||||||
foreach (var variable in variables)
|
foreach (var variable in variables)
|
||||||
{
|
{
|
||||||
@@ -51,7 +67,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
|||||||
Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable)
|
Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable)
|
||||||
};
|
};
|
||||||
|
|
||||||
VariableMqttAliases.Add(variableMqttAlias);
|
CurrentMqttAliases.Add(variableMqttAlias);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +86,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
|||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void Confirm()
|
private void Confirm()
|
||||||
{
|
{
|
||||||
var result = VariableMqttAliases.ToList();
|
var result = CurrentMqttAliases.ToList();
|
||||||
Close(result);
|
Close(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +108,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
|||||||
if (string.IsNullOrWhiteSpace(prefix))
|
if (string.IsNullOrWhiteSpace(prefix))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var alias in VariableMqttAliases)
|
foreach (var alias in CurrentMqttAliases)
|
||||||
{
|
{
|
||||||
alias.Alias = $"{prefix}_{alias.Variable.Name}";
|
alias.Alias = $"{prefix}_{alias.Variable.Name}";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,10 @@ using DMS.Application.Interfaces;
|
|||||||
using DMS.Application.Interfaces.Management;
|
using DMS.Application.Interfaces.Management;
|
||||||
using DMS.Core.Models;
|
using DMS.Core.Models;
|
||||||
using DMS.WPF.Interfaces;
|
using DMS.WPF.Interfaces;
|
||||||
using DMS.WPF.ViewModels.Dialogs;
|
|
||||||
using DMS.WPF.ItemViewModel;
|
using DMS.WPF.ItemViewModel;
|
||||||
|
using DMS.WPF.ViewModels.Dialogs;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
|
||||||
namespace DMS.WPF.ViewModels
|
namespace DMS.WPF.ViewModels
|
||||||
@@ -39,6 +40,9 @@ namespace DMS.WPF.ViewModels
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private ObservableCollection<MqttAlias> _associatedVariables;
|
private ObservableCollection<MqttAlias> _associatedVariables;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private IList _selectedMqttAliaes = new ArrayList();
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构造函数。
|
/// 构造函数。
|
||||||
@@ -198,9 +202,9 @@ namespace DMS.WPF.ViewModels
|
|||||||
/// 修改变量的MQTT发送名称
|
/// 修改变量的MQTT发送名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private async Task ModifyAlias(MqttAlias variableAlias)
|
private async Task ModifyAlias()
|
||||||
{
|
{
|
||||||
if (variableAlias == null)
|
if (SelectedMqttAliaes.Count == 0)
|
||||||
{
|
{
|
||||||
_notificationService.ShowError("请选择要修改的变量项。");
|
_notificationService.ShowError("请选择要修改的变量项。");
|
||||||
return;
|
return;
|
||||||
@@ -208,23 +212,38 @@ namespace DMS.WPF.ViewModels
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
List<MqttAliasItem> selectedMqttAliaes = SelectedMqttAliaes.Cast<MqttAliasItem>().ToList();
|
||||||
// 创建一个用于输入新名称的简单对话框
|
// 创建一个用于输入新名称的简单对话框
|
||||||
var oldAlias = variableAlias.Alias;
|
|
||||||
InputDialogViewModel viewModel = new InputDialogViewModel("修改发送名称", "请输入新的MQTT发送名称:", oldAlias);
|
|
||||||
var dialogResult = await _dialogService.ShowDialogAsync(viewModel);
|
|
||||||
|
|
||||||
if (dialogResult != null) // 用户没有取消操作
|
MqttAliasBatchEditDialogViewModel viewModel = new MqttAliasBatchEditDialogViewModel(selectedMqttAliaes);
|
||||||
{
|
var resMqttAliaes = await _dialogService.ShowDialogAsync(viewModel);
|
||||||
var newAlias = dialogResult.Trim();
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(newAlias))
|
if (resMqttAliaes is null) // 用户没有取消操作
|
||||||
{
|
{
|
||||||
_notificationService.ShowWarn("发送名称不能为空。");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
foreach (var item in resMqttAliaes)
|
||||||
|
{
|
||||||
|
foreach (var selectItem in selectedMqttAliaes)
|
||||||
|
{
|
||||||
|
if (item.Id == selectItem.Id)
|
||||||
|
{
|
||||||
|
selectItem.Alias = item.Alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 更新变量的发送名称
|
}
|
||||||
variableAlias.Alias = newAlias;
|
|
||||||
|
//var newAlias = dialogResult.Trim();
|
||||||
|
|
||||||
|
//if (string.IsNullOrEmpty(newAlias))
|
||||||
|
//{
|
||||||
|
// _notificationService.ShowWarn("发送名称不能为空。");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//// 更新变量的发送名称
|
||||||
|
//variableAlias.Alias = newAlias;
|
||||||
|
|
||||||
// 保存更改到数据服务
|
// 保存更改到数据服务
|
||||||
// var result = await _wpfDataService.UpdateMqttServer(CurrentMqtt);
|
// var result = await _wpfDataService.UpdateMqttServer(CurrentMqtt);
|
||||||
@@ -240,7 +259,6 @@ namespace DMS.WPF.ViewModels
|
|||||||
// variableAlias.Alias = oldAlias;
|
// variableAlias.Alias = oldAlias;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_logger.LogError(e, "修改变量发送名称时发生错误");
|
_logger.LogError(e, "修改变量发送名称时发生错误");
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<DataGrid Grid.Row="2"
|
<DataGrid Grid.Row="2"
|
||||||
ItemsSource="{Binding VariableMqttAliases}"
|
ItemsSource="{Binding CurrentMqttAliases}"
|
||||||
AutoGenerateColumns="False"
|
AutoGenerateColumns="False"
|
||||||
CanUserAddRows="False"
|
CanUserAddRows="False"
|
||||||
CanUserDeleteRows="False"
|
CanUserDeleteRows="False"
|
||||||
|
|||||||
@@ -1,31 +1,39 @@
|
|||||||
<UserControl x:Class="DMS.WPF.Views.MqttServerDetailView"
|
<UserControl
|
||||||
|
x:Class="DMS.WPF.Views.MqttServerDetailView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
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:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:helper="clr-namespace:DMS.WPF.Helper"
|
||||||
|
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
|
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||||
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
|
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
|
||||||
mc:Ignorable="d"
|
d:DesignHeight="450"
|
||||||
d:DesignHeight="450" d:DesignWidth="800">
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<valueConverts:EnumDescriptionConverter x:Key="EnumDescriptionConverter"/>
|
<valueConverts:EnumDescriptionConverter x:Key="EnumDescriptionConverter" />
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
|
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<!-- 顶部导航栏 -->
|
<!-- 顶部导航栏 -->
|
||||||
<Border DockPanel.Dock="Top" Margin="20,10" Padding="15">
|
<Border
|
||||||
|
Margin="20,10"
|
||||||
|
Padding="15"
|
||||||
|
DockPanel.Dock="Top">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<!-- 返回MQTT列表按钮 -->
|
<!-- 返回MQTT列表按钮 -->
|
||||||
<Button Grid.Column="0"
|
<Button
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="0,0,10,0"
|
||||||
Command="{Binding NavigateToMqttsCommand}"
|
Command="{Binding NavigateToMqttsCommand}"
|
||||||
Style="{StaticResource ButtonDefault}"
|
Style="{StaticResource ButtonDefault}"
|
||||||
ToolTip="返回MQTT服务器列表"
|
ToolTip="返回MQTT服务器列表">
|
||||||
Margin="0,0,10,0">
|
|
||||||
<Button.Content>
|
<Button.Content>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.ArrowLeft8}" />
|
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.ArrowLeft8}" />
|
||||||
@@ -34,12 +42,16 @@
|
|||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<!-- 操作菜单栏 -->
|
<!-- 操作菜单栏 -->
|
||||||
<ui:CommandBar Grid.Column="1"
|
<ui:CommandBar
|
||||||
|
Grid.Column="1"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
DefaultLabelPosition="Right"
|
DefaultLabelPosition="Right"
|
||||||
IsOpen="False"
|
IsOpen="False">
|
||||||
HorizontalAlignment="Right">
|
|
||||||
|
|
||||||
<ui:AppBarButton x:Name="EditButton" Label="编辑" Command="{Binding EditMqttCommand}">
|
<ui:AppBarButton
|
||||||
|
x:Name="EditButton"
|
||||||
|
Command="{Binding EditMqttCommand}"
|
||||||
|
Label="编辑">
|
||||||
<ui:AppBarButton.Icon>
|
<ui:AppBarButton.Icon>
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
|
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
|
||||||
</ui:AppBarButton.Icon>
|
</ui:AppBarButton.Icon>
|
||||||
@@ -65,227 +77,379 @@
|
|||||||
<ScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto">
|
<ScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto">
|
||||||
<StackPanel Margin="20">
|
<StackPanel Margin="20">
|
||||||
<!-- MQTT Server Details -->
|
<!-- MQTT Server Details -->
|
||||||
<Border Background="White" BorderBrush="#E0E0E0" BorderThickness="1" CornerRadius="8" Margin="0,0,0,10" Padding="15">
|
<Border
|
||||||
|
Margin="0,0,0,10"
|
||||||
|
Padding="15"
|
||||||
|
Background="White"
|
||||||
|
BorderBrush="#E0E0E0"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="8">
|
||||||
<Border.Effect>
|
<Border.Effect>
|
||||||
<DropShadowEffect ShadowDepth="2" BlurRadius="5" Opacity="0.1" Color="#888888"/>
|
<DropShadowEffect
|
||||||
|
BlurRadius="5"
|
||||||
|
Opacity="0.1"
|
||||||
|
ShadowDepth="2"
|
||||||
|
Color="#888888" />
|
||||||
</Border.Effect>
|
</Border.Effect>
|
||||||
|
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<Grid Margin="0,0,0,10">
|
<Grid Margin="0,0,0,10">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
<StackPanel Grid.Column="0" Orientation="Horizontal">
|
||||||
<ui:FontIcon FontFamily="{StaticResource MdFontIcons}"
|
<ui:FontIcon
|
||||||
Glyph="󰒋"
|
|
||||||
FontSize="24"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Margin="0,0,10,0"
|
Margin="0,0,10,0"
|
||||||
Foreground="#2196F3"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="MQTT 服务器详情"
|
FontFamily="{StaticResource MdFontIcons}"
|
||||||
|
FontSize="24"
|
||||||
|
Foreground="#2196F3"
|
||||||
|
Glyph="󰒋" />
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
Style="{StaticResource SubtitleTextBlockStyle}"
|
Style="{StaticResource SubtitleTextBlockStyle}"
|
||||||
VerticalAlignment="Center"/>
|
Text="MQTT 服务器详情" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid Margin="0,8,0,8">
|
<Grid Margin="0,8,0,8">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<StackPanel Grid.Row="0" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
<StackPanel
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Tag}"
|
Grid.Row="0"
|
||||||
FontSize="16"
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="名称:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.Tag}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="名称:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding CurrentMqtt.ServerName}"
|
<TextBlock
|
||||||
Margin="0,0,10,12" VerticalAlignment="Center"
|
Grid.Row="0"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,12"
|
||||||
<StackPanel Grid.Row="0" Grid.Column="2" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.World}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.ServerName}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="0"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="主机:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.World}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="主机:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="3" Text="{Binding CurrentMqtt.ServerUrl}"
|
<TextBlock
|
||||||
Margin="0,0,0,12" VerticalAlignment="Center"
|
Grid.Row="0"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="3"
|
||||||
|
Margin="0,0,0,12"
|
||||||
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.ConnectApp}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.ServerUrl}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="端口:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.ConnectApp}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="端口:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding CurrentMqtt.Port}"
|
<TextBlock
|
||||||
Margin="0,0,10,12" VerticalAlignment="Center"
|
Grid.Row="1"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,12"
|
||||||
<StackPanel Grid.Row="1" Grid.Column="2" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.ContactInfo}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.Port}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="1"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="客户端ID:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.ContactInfo}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="客户端ID:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="3" Text="{Binding CurrentMqtt.ClientId}"
|
<TextBlock
|
||||||
Margin="0,0,0,12" VerticalAlignment="Center"
|
Grid.Row="1"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="3"
|
||||||
|
Margin="0,0,0,12"
|
||||||
<StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.People}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.ClientId}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="用户名:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.People}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="用户名:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding CurrentMqtt.Username}"
|
<TextBlock
|
||||||
Margin="0,0,10,12" VerticalAlignment="Center"
|
Grid.Row="2"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,12"
|
||||||
<StackPanel Grid.Row="2" Grid.Column="2" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Lock}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.Username}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="2"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="密码:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.Lock}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="密码:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="3" Text="{Binding CurrentMqtt.Password}"
|
<TextBlock
|
||||||
Margin="0,0,0,12" VerticalAlignment="Center"
|
Grid.Row="2"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="3"
|
||||||
|
Margin="0,0,0,12"
|
||||||
<StackPanel Grid.Row="3" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon FontFamily="{StaticResource MdFontIcons}"
|
|
||||||
Glyph="󰚧"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.Password}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="发布主题:" VerticalAlignment="Center"/>
|
FontFamily="{StaticResource MdFontIcons}"
|
||||||
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Glyph="󰚧" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="发布主题:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding CurrentMqtt.PublishTopic}"
|
<TextBlock
|
||||||
Margin="0,0,10,12" VerticalAlignment="Center"
|
Grid.Row="3"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,12"
|
||||||
<StackPanel Grid.Row="3" Grid.Column="2" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon FontFamily="{StaticResource MdFontIcons}"
|
|
||||||
Glyph="󰂞"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.PublishTopic}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="订阅主题:" VerticalAlignment="Center"/>
|
FontFamily="{StaticResource MdFontIcons}"
|
||||||
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Glyph="󰂞" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="订阅主题:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="3" Grid.Column="3" Text="{Binding CurrentMqtt.SubscribeTopic}"
|
<TextBlock
|
||||||
Margin="0,0,0,12" VerticalAlignment="Center"
|
Grid.Row="3"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="3"
|
||||||
|
Margin="0,0,0,12"
|
||||||
<StackPanel Grid.Row="4" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.PC1}"
|
|
||||||
FontSize="16"
|
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.SubscribeTopic}" />
|
||||||
|
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="4"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="平台:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.PC1}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="平台:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<!-- <TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding CurrentMqtt.MqttPlatform, Converter={StaticResource EnumDescriptionConverter}}" Margin="0,0,10,12" VerticalAlignment="Center" FontWeight="SemiBold" Foreground="#333333"/> -->
|
<!-- <TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding CurrentMqtt.MqttPlatform, Converter={StaticResource EnumDescriptionConverter}}" Margin="0,0,10,12" VerticalAlignment="Center" FontWeight="SemiBold" Foreground="#333333"/> -->
|
||||||
|
|
||||||
<StackPanel Grid.Row="5" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,12">
|
<StackPanel
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Mail}"
|
Grid.Row="5"
|
||||||
FontSize="16"
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="消息头:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.Mail}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="消息头:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="5" Grid.Column="1" Text="{Binding CurrentMqtt.MessageHeader}"
|
<TextBlock
|
||||||
Margin="0,0,10,12" VerticalAlignment="Center"
|
Grid.Row="5"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,12"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.MessageHeader}" />
|
||||||
|
|
||||||
<StackPanel Grid.Row="5" Grid.Column="2" Orientation="Horizontal" Margin="0,0,5,12">
|
<StackPanel
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Mail}"
|
Grid.Row="5"
|
||||||
FontSize="16"
|
Grid.Column="2"
|
||||||
VerticalAlignment="Center"
|
Margin="0,0,5,12"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ui:FontIcon
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
VerticalAlignment="Center"
|
||||||
<TextBlock Text="消息内容:" VerticalAlignment="Center"/>
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.Mail}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="消息内容:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="5" Grid.Column="3" Text="{Binding CurrentMqtt.MessageContent}"
|
<TextBlock
|
||||||
Margin="0,0,0,12" VerticalAlignment="Center"
|
Grid.Row="5"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="3"
|
||||||
|
Margin="0,0,0,12"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.MessageContent}" />
|
||||||
|
|
||||||
<StackPanel Grid.Row="6" Grid.Column="0" Orientation="Horizontal" Margin="0,0,5,0">
|
<StackPanel
|
||||||
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Mail}"
|
Grid.Row="6"
|
||||||
FontSize="16"
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
|
||||||
Margin="0,0,5,0"
|
Margin="0,0,5,0"
|
||||||
Foreground="#666666"/>
|
Orientation="Horizontal">
|
||||||
<TextBlock Text="消息尾:" VerticalAlignment="Center"/>
|
<ui:FontIcon
|
||||||
|
Margin="0,0,5,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontSize="16"
|
||||||
|
Foreground="#666666"
|
||||||
|
Icon="{x:Static ui:SegoeFluentIcons.Mail}" />
|
||||||
|
<TextBlock VerticalAlignment="Center" Text="消息尾:" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock Grid.Row="6" Grid.Column="1" Text="{Binding CurrentMqtt.MessageFooter}"
|
<TextBlock
|
||||||
Margin="0,0,10,0" VerticalAlignment="Center"
|
Grid.Row="6"
|
||||||
FontWeight="SemiBold" Foreground="#333333"/>
|
Grid.Column="1"
|
||||||
|
Margin="0,0,10,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontWeight="SemiBold"
|
||||||
|
Foreground="#333333"
|
||||||
|
Text="{Binding CurrentMqtt.MessageFooter}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
<!-- Associated Variables -->
|
<!-- Associated Variables -->
|
||||||
<Border Background="White" BorderBrush="#E0E0E0" BorderThickness="1" CornerRadius="8" Margin="0,0,0,10" Padding="15">
|
<Border
|
||||||
|
Margin="0,0,0,10"
|
||||||
|
Padding="15"
|
||||||
|
Background="White"
|
||||||
|
BorderBrush="#E0E0E0"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="8">
|
||||||
<Border.Effect>
|
<Border.Effect>
|
||||||
<DropShadowEffect ShadowDepth="2" BlurRadius="5" Opacity="0.1" Color="#888888"/>
|
<DropShadowEffect
|
||||||
|
BlurRadius="5"
|
||||||
|
Opacity="0.1"
|
||||||
|
ShadowDepth="2"
|
||||||
|
Color="#888888" />
|
||||||
</Border.Effect>
|
</Border.Effect>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*"/>
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<TextBlock Grid.Row="0" Text="关联变量" Style="{StaticResource SubtitleTextBlockStyle}" Margin="0,0,0,10"/>
|
<TextBlock
|
||||||
<DataGrid Grid.Row="1" x:Name="AssociatedVariablesDataGrid"
|
Grid.Row="0"
|
||||||
ItemsSource="{Binding CurrentMqtt.VariableAliases}"
|
Margin="0,0,0,10"
|
||||||
|
Style="{StaticResource SubtitleTextBlockStyle}"
|
||||||
|
Text="关联变量" />
|
||||||
|
<DataGrid
|
||||||
|
x:Name="AssociatedVariablesDataGrid"
|
||||||
|
Grid.Row="1"
|
||||||
AutoGenerateColumns="False"
|
AutoGenerateColumns="False"
|
||||||
CanUserAddRows="False"
|
CanUserAddRows="False"
|
||||||
CanUserDeleteRows="False"
|
CanUserDeleteRows="False"
|
||||||
IsReadOnly="True"
|
IsReadOnly="True"
|
||||||
|
ItemsSource="{Binding CurrentMqtt.VariableAliases}"
|
||||||
SelectionMode="Extended">
|
SelectionMode="Extended">
|
||||||
|
|
||||||
|
<i:Interaction.Behaviors>
|
||||||
|
<helper:SelectedItemsBehavior SelectedItems="{Binding SelectedMqttAliaes}" />
|
||||||
|
</i:Interaction.Behaviors>
|
||||||
|
|
||||||
|
|
||||||
<DataGrid.ContextMenu>
|
<DataGrid.ContextMenu>
|
||||||
<ContextMenu>
|
<ContextMenu>
|
||||||
<MenuItem Header="修改发送名称" Command="{Binding ModifyAliasCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=SelectedItems[0]}"/>
|
<MenuItem
|
||||||
|
Command="{Binding ModifyAliasCommand}"
|
||||||
|
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=SelectedItems[0]}"
|
||||||
|
Header="修改发送名称" />
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</DataGrid.ContextMenu>
|
</DataGrid.ContextMenu>
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
<DataGridTextColumn Header="设备名称" Binding="{Binding Variable.VariableTable.Device.Name}"/>
|
<DataGridTextColumn Binding="{Binding Variable.VariableTable.Device.Name}" Header="设备名称" />
|
||||||
<DataGridTextColumn Header="变量表名称" Binding="{Binding Variable.VariableTable.Name}"/>
|
<DataGridTextColumn Binding="{Binding Variable.VariableTable.Name}" Header="变量表名称" />
|
||||||
<DataGridTextColumn Header="变量名称" Binding="{Binding Variable.Name}"/>
|
<DataGridTextColumn Binding="{Binding Variable.Name}" Header="变量名称" />
|
||||||
<DataGridTextColumn Header="MQTT发送名称" Binding="{Binding Alias}"/>
|
<DataGridTextColumn Binding="{Binding Alias}" Header="MQTT发送名称" />
|
||||||
<DataGridTextColumn Header="地址" Binding="{Binding Variable.S7Address}"/>
|
<DataGridTextColumn Binding="{Binding Variable.S7Address}" Header="地址" />
|
||||||
<DataGridTextColumn Header="数据类型" Binding="{Binding Variable.DataType}"/>
|
<DataGridTextColumn Binding="{Binding Variable.DataType}" Header="数据类型" />
|
||||||
<DataGridTextColumn Header="显示值" Binding="{Binding Variable.DisplayValue}"/>
|
<DataGridTextColumn Binding="{Binding Variable.DisplayValue}" Header="显示值" />
|
||||||
<DataGridTextColumn Header="更新时间" Binding="{Binding Variable.UpdatedAt, StringFormat='yyyy-MM-dd HH:mm:ss'}"/>
|
<DataGridTextColumn Binding="{Binding Variable.UpdatedAt, StringFormat='yyyy-MM-dd HH:mm:ss'}" Header="更新时间" />
|
||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
</DataGrid>
|
</DataGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
Reference in New Issue
Block a user