完成Mqtt服务器添加功能

This commit is contained in:
2025-09-06 12:03:39 +08:00
parent 08f9de137e
commit 52f76e2377
18 changed files with 417 additions and 271 deletions

View File

@@ -4,119 +4,111 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:vmd="clr-namespace:DMS.WPF.ViewModels.Dialogs"
xmlns:ex="clr-namespace:DMS.Extensions"
xmlns:en="clr-namespace:DMS.Core.Enums"
xmlns:enums="clr-namespace:DMS.Core.Enums;assembly=DMS.Core"
xmlns:valueConverts="clr-namespace:DMS.WPF.ValueConverts"
Title="{Binding Title}"
CloseButtonText="取消"
DefaultButton="Primary"
PrimaryButtonText="{Binding PrimaryButText}"
Background="#fff"
PrimaryButtonCommand="{Binding PrimaryButtonCommand}"
CloseButtonCommand="{Binding CancelButtonCommand}"
d:DataContext="{d:DesignInstance vmd:MqttDialogViewModel}"
mc:Ignorable="d">
<ui:ContentDialog.Resources>
<ex:EnumBindingSource x:Key="mqttPlatform"
EnumType="{x:Type enums:MqttPlatform}" />
<valueConverts:EnumDescriptionConverter x:Key="EnumDescriptionConverter" />
<Style x:Key="LabelStyle" TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="Margin" Value="0,0,10,0" />
</Style>
</ui:ContentDialog.Resources>
<Grid Width="480"
Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<!-- 左边列 -->
<ikw:SimpleStackPanel Grid.Column="0"
Margin="10 10 20 10 "
Spacing="12">
<!-- MQTT名称 -->
<TextBlock Text="MQTT名称"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.Name, UpdateSourceTrigger=PropertyChanged}" />
<!-- MQTT IP地址 -->
<TextBlock Text="MQTT IP地址"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox AcceptsReturn="True"
Text="{Binding Mqtt.Host, UpdateSourceTrigger=PropertyChanged}" />
<StackPanel Margin="16">
<!-- 基本信息 -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- Mqtt平台 -->
<TextBlock Text="Mqtt平台"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<ComboBox SelectedItem="{Binding Mqtt.Platform}"
ItemsSource="{Binding Source={StaticResource mqttPlatform} }">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumDescriptionConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<!-- Row 0 -->
<hc:TextBox
Grid.Row="0"
Grid.Column="0"
hc:InfoElement.Title="MQTT名称:"
Text="{Binding MqttServer.ServerName, UpdateSourceTrigger=PropertyChanged}" />
<hc:TextBox
Grid.Row="0"
Grid.Column="2"
hc:InfoElement.Title="客户端ID:"
Text="{Binding MqttServer.ClientId, UpdateSourceTrigger=PropertyChanged}" />
<!-- PublishTopic -->
<TextBlock Text="发布主题"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.PublishTopic, UpdateSourceTrigger=PropertyChanged}" />
<hc:TextBox
Grid.Row="1"
Grid.Column="0"
Margin="0,15,0,0"
Text="{Binding MqttServer.ServerUrl, UpdateSourceTrigger=PropertyChanged}" />
<!-- SubTopics -->
<TextBlock Text="订阅主题"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.SubTopic, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox FontSize="16"
Content="是否设为默认"
Margin="0 30 0 0"
IsChecked="{Binding Mqtt.IsDefault}" />
</ikw:SimpleStackPanel>
<!-- 右边列 -->
<ikw:SimpleStackPanel Margin="10"
Grid.Column="1"
Spacing="12">
<hc:TextBox
Grid.Row="1"
Grid.Column="2"
Margin="0,15,0,0"
hc:InfoElement.Title="端口:"
Text="{Binding MqttServer.Port, UpdateSourceTrigger=PropertyChanged}" />
<!-- MQTT备注 -->
<TextBlock Text="MQTT备注"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.Remark, UpdateSourceTrigger=PropertyChanged}" />
<!-- MQTT端口 -->
<TextBlock Text="MQTT端口"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox AcceptsReturn="True"
Text="{Binding Mqtt.Port, UpdateSourceTrigger=PropertyChanged}" />
<!-- Row 2 -->
<hc:TextBox
Grid.Row="2"
Grid.Column="0"
Margin="0,15,0,0"
hc:InfoElement.Title="用户名:"
Text="{Binding MqttServer.Username, UpdateSourceTrigger=PropertyChanged}" />
<!-- 用户名 -->
<TextBlock Text="用户名"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.UserName, UpdateSourceTrigger=PropertyChanged}" />
<hc:TextBox
Grid.Row="2"
Grid.Column="2"
Margin="0,15,0,0"
hc:InfoElement.Title="密码:"
Text="{Binding MqttServer.Password, UpdateSourceTrigger=PropertyChanged}" />
<!-- 密码 -->
<TextBlock Text="密码"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.PassWord, UpdateSourceTrigger=PropertyChanged}" />
<!-- Row 3 -->
<hc:TextBox
Grid.Row="3"
Grid.Column="0"
Margin="0,15,0,0"
hc:InfoElement.Title="发布主题:"
Text="{Binding MqttServer.PublishTopic, UpdateSourceTrigger=PropertyChanged}" />
<!-- ClientID -->
<TextBlock Text="ClientID"
HorizontalAlignment="Left"
Style="{StaticResource TextBlockSubTitle}" />
<TextBox Text="{Binding Mqtt.ClientID, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox FontSize="16"
Content="是否启用"
Margin="0 30 0 0"
IsChecked="{Binding Mqtt.IsActive}" />
</ikw:SimpleStackPanel>
</Grid>
<hc:TextBox
Grid.Row="3"
Grid.Column="2"
Margin="0,15,0,0"
hc:InfoElement.Title="订阅主题:"
Text="{Binding MqttServer.SubscribeTopic, UpdateSourceTrigger=PropertyChanged}" />
<!-- Row 4 -->
<CheckBox
Grid.Row="4"
Grid.Column="0"
Margin="0,20,0,0"
Content="是否启用"
IsChecked="{Binding MqttServer.IsActive}" />
</Grid>
</StackPanel>
</ui:ContentDialog>

View File

@@ -5,9 +5,13 @@ namespace DMS.WPF.Views.Dialogs;
public partial class MqttDialog : ContentDialog
{
public MqttDialog(MqttDialogViewModel viewModel)
public MqttDialog()
{
InitializeComponent();
}
public MqttDialog(MqttDialogViewModel viewModel) : this()
{
DataContext = viewModel;
}
}