Files
SzmediTools/Szmedi.RvKits/MEPTools/FacilityInfoProcessView.xaml

360 lines
19 KiB
Plaintext
Raw Normal View History

2025-12-23 21:37:02 +08:00
<controls:MaterialWindow
x:Class="Szmedi.RvKits.MEPTools.FacilityInfoProcessView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Szmedi.RvKits.Controls"
xmlns:conv="clr-namespace:Szmedi.RvKits.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Szmedi.RvKits.MEPTools"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="设备信息"
2026-01-16 17:07:43 +08:00
Width="900"
Height="600"
2025-12-23 21:37:02 +08:00
d:DataContext="{d:DesignInstance Type=local:FacilityInfoProcessViewModel}"
mc:Ignorable="d">
<controls:MaterialWindow.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Szmedi.RvKits;component/WPFUI.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="CenteredTextBlockStyle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<conv:NullOrEmptyToBooleanConverter x:Key="NullOrEmptyToBooleanConverter" />
</ResourceDictionary>
</controls:MaterialWindow.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="200" />
<ColumnDefinition Width="Auto" />
2026-01-16 17:07:43 +08:00
<ColumnDefinition Width="250" MinWidth="100" />
2025-12-23 21:37:02 +08:00
</Grid.ColumnDefinitions>
2026-01-16 17:07:43 +08:00
<GroupBox materialDesign:GroupBoxAssist.HeaderPadding="4" Header="设备表">
2025-12-23 21:37:02 +08:00
<DataGrid
x:Name="Facilities"
Margin="-4"
d:ItemsSource="{d:SampleData ItemCount=5}"
2026-01-16 17:07:43 +08:00
materialDesign:DataGridAssist.CellPadding="8,0"
materialDesign:DataGridAssist.ColumnHeaderPadding="6"
2025-12-23 21:37:02 +08:00
AutoGenerateColumns="False"
CanUserAddRows="False"
FrozenColumnCount="2"
ItemsSource="{Binding Items}"
RowDetailsVisibilityMode="VisibleWhenSelected"
SelectedItem="{Binding SelectedFacility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ToolTip" Value="{Binding ErrorMessage}" />
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger Binding="{Binding ErrorMessage, Converter={StaticResource NullOrEmptyToBooleanConverter}}" Value="True">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowDetailsTemplate>
2026-01-16 17:07:43 +08:00
<DataTemplate DataType="local:FacilityItem">
<GroupBox materialDesign:GroupBoxAssist.HeaderPadding="4" Header="参数列表">
<ItemsControl d:ItemsSource="{d:SampleData ItemCount=5}" ItemsSource="{Binding Parameters}">
2025-12-23 21:37:02 +08:00
<ItemsControl.ItemTemplate>
2026-01-16 17:07:43 +08:00
<DataTemplate DataType="local:ParameterItem">
<TextBox
Padding="2"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"
materialDesign:HintAssist.IsFloating="False"
materialDesign:TextFieldAssist.PrefixText="{Binding Name, StringFormat={}{0}}"
Style="{StaticResource MaterialDesignTextBox}"
Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" />
2025-12-23 21:37:02 +08:00
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding IsSelected}">
<DataGridCheckBoxColumn.Header>
2026-01-16 17:07:43 +08:00
<CheckBox
VerticalContentAlignment="Center"
Content="全选"
IsChecked="{Binding DataContext.IsAllItemsSelected, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
2025-12-23 21:37:02 +08:00
</DataGridCheckBoxColumn.Header>
<DataGridCheckBoxColumn.HeaderStyle>
<Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridCheckBoxColumn.HeaderStyle>
</DataGridCheckBoxColumn>
<DataGridTextColumn
Binding="{Binding Name}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="设备"
IsReadOnly="True" />
<DataGridTextColumn
Binding="{Binding Brand}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="品牌"
IsReadOnly="True" />
<DataGridTextColumn
Binding="{Binding Specification}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="设备型号"
IsReadOnly="True" />
<DataGridTextColumn
Binding="{Binding Stations}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="部署范围"
IsReadOnly="True" />
<DataGridTemplateColumn Header="关联族">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
Command="{Binding DataContext.SelectInstanceCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Content="{Binding DisplayText}"
ToolTip="点击按钮重新选择关联到的族" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GridSplitter
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="1"
Width="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Gray"
ShowsPreview="True" />
<Grid Grid.Row="1" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox
Grid.Row="0"
Grid.Column="0"
Content="包含全线"
IsChecked="{Binding ContainsAllLines}" />
<TextBox
Grid.Row="0"
Grid.Column="1"
materialDesign:HintAssist.Hint="搜索设备名、品牌、型号、部署范围"
Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<!--<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="100" />
<RowDefinition Height="Auto" />
<RowDefinition Height="200" MinHeight="100" />
</Grid.RowDefinitions>
<GroupBox Header="参数表">
<DataGrid
Margin="-4"
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding ElementName=Facilities, Path=SelectedItem.Parameters}">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Name}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="参数"
IsReadOnly="True" />
<DataGridTextColumn
Binding="{Binding Value}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="参数值" />
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GridSplitter
Grid.Row="1"
Height="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Gray"
ShowsPreview="True" />
<GroupBox Grid.Row="2" Header="构件实例表">
<DataGrid
Margin="-4"
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding ElementName=Facilities, Path=SelectedItem.Instances}">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Name}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="实例名称"
IsReadOnly="True" />
<DataGridTemplateColumn Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<UniformGrid Rows="1">
<Button
Command="{Binding DataContext.LocationInstanceCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Content="定位" />
<Button
Command="{Binding DataContext.RemoveInstanceCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Content="移除" />
</UniformGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
</Grid>-->
<GroupBox
Grid.Row="0"
Grid.Column="2"
2026-01-16 17:07:43 +08:00
materialDesign:GroupBoxAssist.HeaderPadding="4"
2025-12-23 21:37:02 +08:00
Header="构件实例表">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DataGrid
x:Name="InstancesDG"
Margin="-4"
d:ItemsSource="{d:SampleData ItemCount=5}"
2026-01-16 17:07:43 +08:00
materialDesign:DataGridAssist.CellPadding="8,0"
materialDesign:DataGridAssist.ColumnHeaderPadding="6"
2025-12-23 21:37:02 +08:00
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding ElementName=Facilities, Path=SelectedItem.Instances}"
SelectionMode="Extended">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding Id}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="实例名称"
IsReadOnly="True" />
<DataGridTextColumn
Binding="{Binding Name}"
ElementStyle="{StaticResource CenteredTextBlockStyle}"
Header="实例名称"
IsReadOnly="True" />
<DataGridTemplateColumn Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button
Command="{Binding DataContext.LocationInstanceCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Style="{StaticResource MaterialDesignToolForegroundButton}">
<materialDesign:PackIcon Kind="Show" />
</Button>
<Button
Command="{Binding DataContext.RemoveInstanceCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Style="{StaticResource MaterialDesignToolForegroundButton}">
<materialDesign:PackIcon Kind="Remove" />
</Button>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<StackPanel
Grid.Row="1"
Margin="0,10,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Orientation="Horizontal">
<Button
Margin="2,0"
Command="{Binding RemoveAllInstancesCommand}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="移除表中全部实例">
<materialDesign:PackIcon Kind="Delete" />
</Button>
<Button
Margin="2,0"
Command="{Binding RemoveSelectedInstancesCommand}"
CommandParameter="{Binding ElementName=InstancesDG, Path=SelectedItems}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="批量移除表中选中实例">
<materialDesign:PackIcon Kind="SelectionRemove" />
</Button>
<GridSplitter Width="2" Background="Gray" />
<Button
Margin="2,0"
Command="{Binding SelectAllInstancesCommand}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="在Revit中选中全部实例">
<materialDesign:PackIcon Kind="SelectAll" />
</Button>
<Button
Margin="2,0"
Command="{Binding SelectSelectedInstancesCommand}"
CommandParameter="{Binding ElementName=InstancesDG, Path=SelectedItems}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="在Revit中选择表中选中实例">
<materialDesign:PackIcon Kind="SelectGroup" />
</Button>
<GridSplitter Width="2" Background="Gray" />
<Button
Margin="2,0"
Command="{Binding RepickInstancesByRectangleCommand}"
CommandParameter="{Binding SelectedFacility.MappedFamily}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="框选实例附加到构件实例表">
<materialDesign:PackIcon Kind="Select" />
</Button>
<Button
Grid.Row="1"
Margin="2,0"
Command="{Binding RepickSamplingInstancesCommand}"
CommandParameter="{Binding SelectedFacility.MappedFamily}"
Style="{StaticResource MaterialDesignFloatingActionMiniButton}"
ToolTip="点选实例附加到构件实例表可以连续点击按ESC或右键取消">
<materialDesign:PackIcon Kind="CursorHand" />
</Button>
</StackPanel>
</Grid>
</GroupBox>
<UniformGrid
Grid.Row="2"
Grid.Column="2"
Rows="1">
<Button
Command="{Binding BrowserExcelCommand}"
Content="选择设备表"
ToolTip="选择设备信息表" />
<Button
Command="{Binding ProcessModelInfoCommand}"
Content="添加设备信息"
ToolTip="将参数表的参数添加到构件实例表的实例参数" />
</UniformGrid>
<TextBox
Grid.Row="1"
Grid.Column="2"
materialDesign:HintAssist.Hint="搜索构件表"
Text="{Binding SearchInstanceText, UpdateSourceTrigger=PropertyChanged}" />
<TextBox
Grid.Row="2"
Grid.Column="0"
materialDesign:HintAssist.Hint="设备信息表路径"
IsReadOnly="True"
Text="{Binding ExcelPath}" />
</Grid>
</controls:MaterialWindow>