Multiselection added to FileListView

This commit is contained in:
Alexander Shabarshov 2026-05-21 23:25:11 +01:00
parent 3f1924a429
commit ad418e18a9
2 changed files with 38 additions and 26 deletions

View File

@ -8,6 +8,7 @@ public partial class FileListViewModel : ObservableObject
{ {
private readonly IFileJobFactory _factory; private readonly IFileJobFactory _factory;
public ObservableCollection<FileJobViewModel> Files { get; } = []; public ObservableCollection<FileJobViewModel> Files { get; } = [];
public ObservableCollection<FileJobViewModel> SelectedFiles { get; } = [];
[ObservableProperty] [ObservableProperty]
private FileJobViewModel? _selected; private FileJobViewModel? _selected;

View File

@ -12,11 +12,11 @@
<Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/> <Setter Property="BorderThickness" Value="0"/>
</Style> </Style>
<Style Selector="views|FileListView[IsDragActive=true] Border#DropZone"> <Style Selector="views|FileListView[IsDragActive=true] Border#DropZone">
<Setter Property="BorderBrush" Value="Red"/> <Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="2"/> <Setter Property="BorderThickness" Value="2"/>
</Style> </Style>
</UserControl.Styles> </UserControl.Styles>
<Border x:Name="DropZone" <Border x:Name="DropZone"
@ -28,30 +28,45 @@
DragDrop.DragEnter="OnDragEnter" DragDrop.DragEnter="OnDragEnter"
DragDrop.DragLeave="OnDragLeave"> DragDrop.DragLeave="OnDragLeave">
<ScrollViewer> <ScrollViewer>
<ItemsControl ItemsSource="{Binding Files}"> <ListBox ItemsSource="{Binding Files}"
<ItemsControl.ItemsPanel> SelectedItems="{Binding SelectedFiles}"
SelectedItem="{Binding Selected}"
SelectionMode="Multiple"
BorderThickness="0"
Background="Transparent">
<ListBox.ItemsPanel>
<ItemsPanelTemplate> <ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/> <WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate> </ItemsPanelTemplate>
</ItemsControl.ItemsPanel> </ListBox.ItemsPanel>
<ItemsControl.ItemTemplate> <ListBox.Styles>
<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="#9A9A9A"/>
</Style>
</ListBox.Styles>
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:FileJobViewModel"> <DataTemplate x:DataType="vm:FileJobViewModel">
<Border Margin="6" Padding="6" Background="#2A2A2A" CornerRadius="4"> <Border x:Name="ItemRoot"
Margin="0"
Padding="0"
CornerRadius="4"
Background="#2A2A2A">
<StackPanel MinWidth="160" MaxWidth="160"> <StackPanel MinWidth="160" MaxWidth="160">
<Border Width="160" Height="90" ClipToBounds="True"> <Border Width="160" Height="90" ClipToBounds="True">
<Grid> <Grid>
<!-- Thumbnail -->
<Image Source="{Binding Thumbnail}" <Image Source="{Binding Thumbnail}"
Stretch="UniformToFill" Stretch="UniformToFill"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center"/> VerticalAlignment="Center"/>
<!-- Suggested action decal --> <TextBlock FontFamily="{StaticResource FontAwesome}"
<TextBlock
FontFamily="{StaticResource FontAwesome}"
Text="{Binding SuggestedAction, Converter={StaticResource ActionToIconConverter}}" Text="{Binding SuggestedAction, Converter={StaticResource ActionToIconConverter}}"
FontSize="12" FontSize="12"
HorizontalAlignment="Right" HorizontalAlignment="Right"
@ -64,9 +79,7 @@
Margin="0,6,0,0" Margin="0,6,0,0"
FontSize="10"/> FontSize="10"/>
<ProgressBar MinWidth="160"
<ProgressBar
MinWidth="160"
MaxWidth="160" MaxWidth="160"
Height="10" Height="10"
Margin="0,4,0,0" Margin="0,4,0,0"
@ -74,10 +87,8 @@
</StackPanel> </StackPanel>
</Border> </Border>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate>
</ItemsControl.ItemTemplate> </ListBox>
</ItemsControl>
</ScrollViewer> </ScrollViewer>
</Border> </Border>
</UserControl> </UserControl>