Files
Libation/Source/LibationAvalonia/Views/ProductsDisplay.axaml
Michael Bucari-Tovo df531de255 Update Avalonia to v12
Avalonia 12 uses compiled bindings by default. Converted all remaining reflection bindings into compiled bindings,

Fixed binding errors
2026-05-04 21:08:26 -06:00

383 lines
18 KiB
XML

<UserControl xmlns="https://github.com/avaloniaui"
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"
xmlns:views="clr-namespace:LibationAvalonia.Views"
xmlns:vm="clr-namespace:LibationAvalonia.ViewModels"
xmlns:uibase="clr-namespace:LibationUiBase.GridView;assembly=LibationUiBase"
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
mc:Ignorable="d" d:DesignWidth="1560" d:DesignHeight="400"
x:DataType="vm:ProductsDisplayViewModel"
x:Class="LibationAvalonia.Views.ProductsDisplay">
<Grid>
<DataGrid
Name="productsGrid"
ClipboardCopyMode="IncludeHeader"
GridLinesVisibility="All"
AutoGenerateColumns="False"
ItemsSource="{Binding GridEntries}"
CanUserSortColumns="True" BorderThickness="3"
CanUserResizeColumns="True"
LoadingRow="ProductsDisplay_LoadingRow"
CanUserReorderColumns="True">
<DataGrid.Styles>
<Style Selector="DataGridColumnHeader">
<Setter Property="ContextMenu">
<ContextMenu Name="GridHeaderContextMenu" Opening="GridHeaderContextMenu_Opening" Closed="GridHeaderContextMenu_Closed">
<ContextMenu.Styles>
<Style Selector="MenuItem">
<Setter Property="Padding" Value="10,0,-10,0" />
<Style Selector="^ CheckBox">
<Setter Property="IsHitTestVisible" Value="True" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Style Selector="^ TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</Style>
</Style>
</ContextMenu.Styles>
<MenuItem>
<MenuItem.Header>
<TextBlock Text="Show / Hide Columns" />
</MenuItem.Header>
</MenuItem>
<MenuItem Header="-"/>
</ContextMenu>
</Setter>
</Style>
<Style Selector="DataGridCell">
<Setter Property="ContextMenu">
<ContextMenu Opening="GridCellContextMenu_Opening" Opened="GridCellContextMenu_Opened"/>
</Setter>
</Style>
<Style Selector="DataGridCell > Panel">
<Setter Property="VerticalAlignment" Value="Stretch"/>
</Style>
<Style Selector="DataGridCell > Panel > TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Padding" Value="4"/>
</Style>
<Style Selector="DataGridCell Path">
<Setter Property="Stretch" Value="Uniform" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Fill" Value="{DynamicResource IconFill}" />
</Style>
<Style Selector="DataGridColumnHeader ContextMenu MenuItem">
<Setter Property="Padding" Value="0" />
<Style Selector="^:icon /template/ Viewbox#PART_IconPresenter">
<Setter Property="Height" Value="32" />
<Setter Property="Width" Value="32" />
<Setter Property="Margin" Value="6,0" />
</Style>
</Style>
</DataGrid.Styles>
<DataGrid.Columns>
<DataGridTemplateColumn
CanUserSort="True"
CanUserResize="False"
IsVisible="{Binding RemoveColumnVisible}"
PropertyChanged="RemoveColumn_PropertyChanged"
Header="Remove"
IsReadOnly="False"
SortMemberPath="Remove"
Width="75">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<CheckBox
HorizontalAlignment="Center"
IsThreeState="True"
IsChecked="{Binding Remove, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<controls:DataGridTemplateColumnExt CanUserResize="False" CanUserSort="True" Header="Liberate" SortMemberPath="Liberate">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<views:LiberateStatusButton
ToolTip.Tip="{Binding Liberate.ToolTip}"
BookStatus="{Binding Liberate.BookStatus}"
PdfStatus="{Binding Liberate.PdfStatus}"
IsUnavailable="{Binding Liberate.IsUnavailable}"
IsSeries="{Binding Liberate.IsSeries}"
Expanded="{Binding Liberate.Expanded}"
Click="LiberateButton_Click" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Liberate.ToolTip" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Cover" CanUserResize="False" CanUserSort="False" SortMemberPath="Cover">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Image Opacity="{Binding Liberate.Opacity}" Tapped="Cover_Click" Source="{Binding Cover}" ToolTip.Tip="Click to see full size" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="LibraryBook.Book.PictureLarge" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Title" MinWidth="10" Width="{Binding TitleWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Title">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Classes="h1" Text="{Binding Title}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Title" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Authors" MinWidth="10" Width="{Binding AuthorsWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Authors">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Authors}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Authors" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Narrators" MinWidth="10" Width="{Binding NarratorsWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Narrators">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Narrators}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Narrators" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Length" MinWidth="10" Width="{Binding LengthWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Length">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Length}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Length" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Series" MinWidth="10" Width="{Binding SeriesWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Series">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Series}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Series" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Series&#xA;Order" MinWidth="10" Width="{Binding SeriesOrderWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="SeriesOrder">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding SeriesOrder}" HorizontalAlignment="Center" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="SeriesOrder" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Description" MinWidth="10" Width="{Binding DescriptionWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}" Tapped="Description_Click" ToolTip.Tip="Click to see full description" >
<TextBlock Text="{Binding Description}" VerticalAlignment="Top" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Description" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Category" MinWidth="10" Width="{Binding CategoryWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Category">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Category}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Category" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridMyRatingColumn
x:DataType="uibase:GridEntry"
Header="Product&#xA;Rating"
IsReadOnly="true"
MinWidth="10"
SortMemberPath="ProductRating" CanUserSort="True"
OpacityBinding="{Binding Liberate.Opacity}"
ClipboardContentBinding="{Binding ProductRating}"
Binding="{Binding ProductRating}">
<controls:DataGridMyRatingColumn.Width>
<Binding x:DataType="vm:ProductsDisplayViewModel" Path="ProductRatingWidth" Mode="TwoWay" />
</controls:DataGridMyRatingColumn.Width>
</controls:DataGridMyRatingColumn>
<controls:DataGridTemplateColumnExt Header="Purchase&#xA;Date" MinWidth="10" Width="{Binding PurchaseDateWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="PurchaseDate">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding PurchaseDate}" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="PurchaseDate" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridMyRatingColumn
x:DataType="uibase:GridEntry"
Header="My Rating"
IsReadOnly="false"
MinWidth="10"
SortMemberPath="MyRating" CanUserSort="True"
OpacityBinding="{Binding Liberate.Opacity}"
ClipboardContentBinding="{Binding MyRating}"
Binding="{Binding MyRating, Mode=TwoWay}">
<controls:DataGridMyRatingColumn.Width>
<Binding x:DataType="vm:ProductsDisplayViewModel" Path="MyRatingWidth" Mode="TwoWay" />
</controls:DataGridMyRatingColumn.Width>
</controls:DataGridMyRatingColumn>
<controls:DataGridTemplateColumnExt Header="Misc" MinWidth="10" Width="{Binding MiscWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Misc">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Misc}" TextWrapping="WrapWithOverflow" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Misc" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Included&#xA;Until" MinWidth="10" Width="{Binding IncludedUntilWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="IncludedUntil">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding IncludedUntil}" TextWrapping="WrapWithOverflow" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="IncludedUntil" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Last&#xA;Download" MinWidth="10" Width="{Binding LastDownloadWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="LastDownload">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}" ToolTip.Tip="{Binding LastDownload.ToolTipText}" DoubleTapped="Version_DoubleClick">
<TextBlock Text="{Binding LastDownload}" TextWrapping="WrapWithOverflow" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="LastDownload" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Is&#xA;Spatial" MinWidth="10" Width="{Binding IsSpatialWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="IsSpatial">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<CheckBox IsChecked="{Binding IsSpatial}" IsEnabled="False" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="IsSpatial" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Account" MinWidth="10" Width="{Binding AccountWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="Account">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Panel Opacity="{Binding Liberate.Opacity}">
<TextBlock Text="{Binding Account}" TextWrapping="Wrap" />
</Panel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="Account" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
<controls:DataGridTemplateColumnExt Header="Tags" MinWidth="10" Width="{Binding BookTagsWidth, Mode=TwoWay}" CanUserSort="True" SortMemberPath="BookTags">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="uibase:GridEntry">
<Button
IsVisible="{Binding !Liberate.IsSeries}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Click="OnTagsButtonClick"
ToolTip.Tip="Click to edit tags">
<Grid
RowDefinitions="*,*,*"
Opacity="{Binding Liberate.Opacity}">
<Viewbox
Grid.Row="1"
Stretch="Uniform"
IsVisible="{Binding BookTags, Converter={x:Static StringConverters.IsNullOrEmpty}}">
<Path Fill="{DynamicResource IconFill}" Data="{StaticResource EditTagsIcon}" />
</Viewbox>
<TextBlock
Classes="h2"
Grid.RowSpan="3"
IsVisible="{Binding BookTags, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" TextWrapping="WrapWithOverflow" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding BookTags}"/>
</Grid>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<controls:DataGridTemplateColumnExt.ClipboardContentBinding>
<Binding x:DataType="uibase:GridEntry" Path="BookTags" />
</controls:DataGridTemplateColumnExt.ClipboardContentBinding>
</controls:DataGridTemplateColumnExt>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>