- DuplicatesViewModel: ModeFiles/Folders, criteria checkboxes, group flattening to DuplicateRow - Uses TenantProfile site URL override pattern (ctx.Url is read-only) - ExportHtmlCommand exports DuplicateGroup list via DuplicatesHtmlExportService - DuplicatesView.xaml: type selector, criteria panel + flattened DataGrid - DuplicatesView.xaml.cs: DI constructor with DataContext wiring
78 lines
5.7 KiB
XML
78 lines
5.7 KiB
XML
<UserControl x:Class="SharepointToolbox.Views.Tabs.DuplicatesView"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:loc="clr-namespace:SharepointToolbox.Localization">
|
|
<DockPanel LastChildFill="True">
|
|
<!-- Options panel -->
|
|
<ScrollViewer DockPanel.Dock="Left" Width="240" VerticalScrollBarVisibility="Auto" Margin="8,8,4,8">
|
|
<StackPanel>
|
|
<Label Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[lbl.site.url]}" />
|
|
<TextBox Text="{Binding SiteUrl, UpdateSourceTrigger=PropertyChanged}"
|
|
IsEnabled="{Binding IsRunning, Converter={StaticResource InverseBoolConverter}}"
|
|
Height="26" Margin="0,0,0,8" />
|
|
|
|
<GroupBox Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[grp.dup.type]}" Margin="0,0,0,8">
|
|
<StackPanel Margin="4">
|
|
<RadioButton Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[rad.dup.files]}"
|
|
IsChecked="{Binding ModeFiles}" Margin="0,2" />
|
|
<RadioButton Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[rad.dup.folders]}"
|
|
IsChecked="{Binding ModeFolders}" Margin="0,2" />
|
|
</StackPanel>
|
|
</GroupBox>
|
|
|
|
<GroupBox Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[grp.dup.criteria]}" Margin="0,0,0,8">
|
|
<StackPanel Margin="4">
|
|
<TextBlock Text="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[lbl.dup.note]}"
|
|
TextWrapping="Wrap" FontSize="11" Foreground="#555" Margin="0,0,0,6" />
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.dup.size]}"
|
|
IsChecked="{Binding MatchSize}" Margin="0,2" />
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.dup.created]}"
|
|
IsChecked="{Binding MatchCreated}" Margin="0,2" />
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.dup.modified]}"
|
|
IsChecked="{Binding MatchModified}" Margin="0,2" />
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.dup.subfolders]}"
|
|
IsChecked="{Binding MatchSubfolders}" Margin="0,2" />
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.dup.filecount]}"
|
|
IsChecked="{Binding MatchFileCount}" Margin="0,2" />
|
|
</StackPanel>
|
|
</GroupBox>
|
|
|
|
<Label Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[lbl.library]}" />
|
|
<TextBox Text="{Binding Library, UpdateSourceTrigger=PropertyChanged}" Height="26"
|
|
ToolTip="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[ph.dup.lib]}" Margin="0,0,0,6" />
|
|
|
|
<CheckBox Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[chk.include.subsites]}"
|
|
IsChecked="{Binding IncludeSubsites}" Margin="0,4,0,8" />
|
|
|
|
<Button Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[btn.run.scan]}"
|
|
Command="{Binding RunCommand}" Height="28" Margin="0,0,0,4" />
|
|
<Button Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[btn.cancel]}"
|
|
Command="{Binding CancelCommand}" Height="28" Margin="0,0,0,8" />
|
|
|
|
<Button Content="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[btn.open.results]}"
|
|
Command="{Binding ExportHtmlCommand}" Height="28" Margin="0,0,0,4" />
|
|
|
|
<TextBlock Text="{Binding StatusMessage}" TextWrapping="Wrap" FontSize="11" Foreground="#555" Margin="0,4" />
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
<!-- Results DataGrid -->
|
|
<DataGrid ItemsSource="{Binding Results}" IsReadOnly="True" AutoGenerateColumns="False"
|
|
VirtualizingPanel.IsVirtualizing="True" Margin="4,8,8,8">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Group" Binding="{Binding GroupName}" Width="160" />
|
|
<DataGridTextColumn Header="Copies" Binding="{Binding GroupSize}" Width="60"
|
|
ElementStyle="{StaticResource RightAlignStyle}" />
|
|
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="160" />
|
|
<DataGridTextColumn Header="Library" Binding="{Binding Library}" Width="120" />
|
|
<DataGridTextColumn Header="Size"
|
|
Binding="{Binding SizeBytes, Converter={StaticResource BytesConverter}}"
|
|
Width="90" ElementStyle="{StaticResource RightAlignStyle}" />
|
|
<DataGridTextColumn Header="Created" Binding="{Binding Created, StringFormat=yyyy-MM-dd}" Width="100" />
|
|
<DataGridTextColumn Header="Modified" Binding="{Binding Modified, StringFormat=yyyy-MM-dd}" Width="100" />
|
|
<DataGridTextColumn Header="Path" Binding="{Binding Path}" Width="*" />
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</DockPanel>
|
|
</UserControl>
|