借助网络配置,控制Modbus工具的日志显示,避免卡死界面
智能大石头 authored at 2021-12-11 22:09:19
8.18 KiB
XCoder
<Window x:Class="CrazyCoder.Views.DataSyncWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="跨库数据同步" Height="700" Width="1100" WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <Style x:Key="GroupBorder" TargetType="Border">
            <Setter Property="BorderBrush" Value="#D0D0D0"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Margin" Value="0,0,0,6"/>
        </Style>

        <Style x:Key="LabelText" TargetType="TextBlock">
            <Setter Property="Margin" Value="4,0,4,0"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </Style>

        <Style x:Key="ActionButton" TargetType="Button">
            <Setter Property="Height" Value="30"/>
            <Setter Property="Margin" Value="4,0"/>
            <Setter Property="Padding" Value="12,0"/>
        </Style>
    </Window.Resources>

    <Grid Margin="8">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <!-- 第1行:源数据库连接 -->
        <Border Grid.Row="0" Style="{StaticResource GroupBorder}" Background="#FFF5E6" Padding="8">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="源数据库:" Style="{StaticResource LabelText}" FontWeight="Bold"/>
                <ComboBox Grid.Column="1" ItemsSource="{Binding Connections}" Text="{Binding SourceConn, UpdateSourceTrigger=PropertyChanged}"
                          Margin="4,0" Height="28" IsEditable="True"/>

                <Button Grid.Column="2" Content="连接" Command="{Binding ConnectSourceCommand}" Style="{StaticResource ActionButton}" MinWidth="80"/>
                <Button Grid.Column="3" Content="断开" Command="{Binding DisconnectSourceCommand}" Style="{StaticResource ActionButton}" MinWidth="80"
                        IsEnabled="{Binding IsSourceConnected}"/>
            </Grid>
        </Border>

        <!-- 第2行:目标数据库连接 -->
        <Border Grid.Row="1" Style="{StaticResource GroupBorder}" Background="#E8FFE8" Padding="8"
                IsEnabled="{Binding IsSourceConnected}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="目标数据库:" Style="{StaticResource LabelText}" FontWeight="Bold"/>
                <ComboBox Grid.Column="1" ItemsSource="{Binding TargetConnections}" Text="{Binding TargetConn, UpdateSourceTrigger=PropertyChanged}"
                          Margin="4,0" Height="28" IsEditable="True"/>

                <Button Grid.Column="2" Content="连接" Command="{Binding ConnectTargetCommand}" Style="{StaticResource ActionButton}" MinWidth="80"/>
                <Button Grid.Column="3" Content="断开" Command="{Binding DisconnectTargetCommand}" Style="{StaticResource ActionButton}" MinWidth="80"
                        IsEnabled="{Binding IsTargetConnected}"/>
            </Grid>
        </Border>

        <!-- 第3行:表列表 -->
        <Border Grid.Row="2" Style="{StaticResource GroupBorder}">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="数据表列表" FontWeight="Bold" Background="#F0F0F0" Padding="6,3"/>
                    <StackPanel Grid.Column="1" Orientation="Horizontal" Background="#F0F0F0">
                        <Button Content="全选" Command="{Binding SelectAllCommand}" Height="24" Width="60" Margin="2"/>
                        <Button Content="反选" Command="{Binding InvertSelectionCommand}" Height="24" Width="60" Margin="2"/>
                        <Button Content="选差异" Command="{Binding SelectDifferentCommand}" Height="24" Width="60" Margin="2"/>
                    </StackPanel>
                </Grid>
                <ListView Grid.Row="1" ItemsSource="{Binding Tables}" BorderThickness="0">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="同步" Width="50">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <CheckBox IsChecked="{Binding EnableSync}" HorizontalAlignment="Center"/>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Header="表名" Width="150" DisplayMemberBinding="{Binding Name}"/>
                            <GridViewColumn Header="描述" Width="150" DisplayMemberBinding="{Binding DisplayName}"/>
                            <GridViewColumn Header="源行数" Width="80" DisplayMemberBinding="{Binding SourceCount}"/>
                            <GridViewColumn Header="目标行数" Width="80" DisplayMemberBinding="{Binding TargetCount}"/>
                            <GridViewColumn Header="已同步" Width="80" DisplayMemberBinding="{Binding SyncCount}"/>
                            <GridViewColumn Header="备注" Width="*" DisplayMemberBinding="{Binding Description}"/>
                        </GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </Border>

        <!-- 第4行:同步设置 -->
        <Border Grid.Row="3" Style="{StaticResource GroupBorder}" Padding="8"
                IsEnabled="{Binding IsTargetConnected}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>

                <CheckBox Grid.Column="0" Content="同步架构" IsChecked="{Binding SyncSchema}" Margin="4,0" VerticalAlignment="Center"/>
                <CheckBox Grid.Column="1" Content="忽略错误" IsChecked="{Binding IgnoreError}" Margin="4,0" VerticalAlignment="Center"/>
                <TextBlock Grid.Column="2" Text="{Binding ProgressText}" VerticalAlignment="Center" Margin="8,0"/>
                <Button Grid.Column="4" Content="开始同步" Command="{Binding SyncDataCommand}"
                        Style="{StaticResource ActionButton}" MinWidth="100"
                        IsEnabled="{Binding IsTargetConnected}"/>
            </Grid>
        </Border>

        <!-- 第5行:状态栏 -->
        <StatusBar Grid.Row="4" Margin="0,2,0,0">
            <StatusBar.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                    </Grid>
                </ItemsPanelTemplate>
            </StatusBar.ItemsPanel>
            <StatusBarItem>
                <TextBlock Text="{Binding Status}"/>
            </StatusBarItem>
        </StatusBar>
    </Grid>
</Window>