Improve re-display function

This commit is contained in:
Michael Bucari-Tovo 2022-07-15 13:09:19 -06:00
parent d62821cd60
commit c2a2e51bde
9 changed files with 100 additions and 93 deletions

View File

@ -55,6 +55,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
public abstract bool IsSeries { get; } public abstract bool IsSeries { get; }
public abstract bool IsEpisode { get; } public abstract bool IsEpisode { get; }
public abstract bool IsBook { get; } public abstract bool IsBook { get; }
public IBrush BackgroundBrush => IsEpisode ? App.SeriesEntryGridBackgroundBrush : null;
#endregion #endregion

View File

@ -9,6 +9,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
{ {
private string _filterString; private string _filterString;
private string _removeBooksButtonText = "Remove # Books from Libation"; private string _removeBooksButtonText = "Remove # Books from Libation";
private bool _removeBooksButtonEnabled = true;
private bool _autoScanChecked = true; private bool _autoScanChecked = true;
private bool _firstFilterIsDefault = true; private bool _firstFilterIsDefault = true;
private bool _removeButtonsVisible = true; private bool _removeButtonsVisible = true;
@ -31,6 +32,10 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
public string RemoveBooksButtonText { get => _removeBooksButtonText; set => this.RaiseAndSetIfChanged(ref _removeBooksButtonText, value); } public string RemoveBooksButtonText { get => _removeBooksButtonText; set => this.RaiseAndSetIfChanged(ref _removeBooksButtonText, value); }
/// <summary> Indicates if the "Remove # Books from Libation" button is enabled </summary>
public bool RemoveBooksButtonEnabled { get => _removeBooksButtonEnabled; set { this.RaiseAndSetIfChanged(ref _removeBooksButtonEnabled, value); } }
/// <summary> Auto scanning accounts is enables </summary> /// <summary> Auto scanning accounts is enables </summary>
public bool AutoScanChecked public bool AutoScanChecked
{ {
@ -44,7 +49,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
} }
/// <summary> Indicates that the first quick filter is the default filter </summary> /// <summary> Indicates if the first quick filter is the default filter </summary>
public bool FirstFilterIsDefault public bool FirstFilterIsDefault
{ {
get => _firstFilterIsDefault; get => _firstFilterIsDefault;
@ -57,7 +62,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
} }
/// <summary> Indicates if the "Remove # Books from Libation" and "Done Removing" buttons shouls be visible </summary> /// <summary> Indicates if the "Remove # Books from Libation" and "Done Removing" buttons should be visible </summary>
public bool RemoveButtonsVisible public bool RemoveButtonsVisible
{ {
get => _removeButtonsVisible; get => _removeButtonsVisible;
@ -70,6 +75,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
/// <summary> The number of accounts currently being scanned </summary> /// <summary> The number of accounts currently being scanned </summary>
public int NumAccountsScanning public int NumAccountsScanning
{ {
@ -83,7 +89,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
} }
} }
/// <summary> Indicates that Libation is currently scanning account(s) </summary> /// <summary> Indicates if Libation is currently scanning account(s) </summary>
public bool ActivelyScanning => _numAccountsScanning > 0; public bool ActivelyScanning => _numAccountsScanning > 0;
/// <summary> Indicates if the "Remove Books" menu items are enabled</summary> /// <summary> Indicates if the "Remove Books" menu items are enabled</summary>
public bool RemoveMenuItemsEnabled => !RemoveButtonsVisible && !ActivelyScanning; public bool RemoveMenuItemsEnabled => !RemoveButtonsVisible && !ActivelyScanning;
@ -183,16 +189,12 @@ namespace LibationWinForms.AvaloniaUI.ViewModels
? $"Begin _PDF Only Backups: {LibraryStats.pdfsNotDownloaded} remaining" ? $"Begin _PDF Only Backups: {LibraryStats.pdfsNotDownloaded} remaining"
: "All PDFs have been downloaded"; : "All PDFs have been downloaded";
this.RaisePropertyChanged(nameof(HasBookResults));
this.RaisePropertyChanged(nameof(StatusCountText)); this.RaisePropertyChanged(nameof(StatusCountText));
this.RaisePropertyChanged(nameof(BookBackupsToolStripText)); this.RaisePropertyChanged(nameof(BookBackupsToolStripText));
this.RaisePropertyChanged(nameof(PdfBackupsToolStripText)); this.RaisePropertyChanged(nameof(PdfBackupsToolStripText));
} }
} }
/// <summary> Indicates whether the library contains any books </summary>
public bool HasBookResults => LibraryStats?.HasBookResults ?? false;
/// <summary> Bottom-left library statistics display text </summary> /// <summary> Bottom-left library statistics display text </summary>
public string StatusCountText { get; private set; } = "[Calculating backed up book quantities] | [Calculating backed up PDFs]"; public string StatusCountText { get; private set; } = "[Calculating backed up book quantities] | [Calculating backed up PDFs]";
/// <summary> The "Begin Book and PDF Backup" menu item header text </summary> /// <summary> The "Begin Book and PDF Backup" menu item header text </summary>

View File

@ -61,6 +61,7 @@ namespace LibationWinForms.AvaloniaUI.Views
productsDisplay.Filter(null); productsDisplay.Filter(null);
_viewModel.RemoveBooksButtonEnabled = true;
_viewModel.RemoveButtonsVisible = true; _viewModel.RemoveButtonsVisible = true;
await productsDisplay.ScanAndRemoveBooksAsync(accounts); await productsDisplay.ScanAndRemoveBooksAsync(accounts);
@ -68,7 +69,9 @@ namespace LibationWinForms.AvaloniaUI.Views
public async void removeBooksBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) public async void removeBooksBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{ {
_viewModel.RemoveBooksButtonEnabled = false;
await productsDisplay.RemoveCheckedBooksAsync(); await productsDisplay.RemoveCheckedBooksAsync();
_viewModel.RemoveBooksButtonEnabled = true;
} }
public async void doneRemovingBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) public async void doneRemovingBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)

View File

@ -41,11 +41,13 @@
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem IsVisible="{Binding !AnyAccounts}" Click="noAccountsYetAddAccountToolStripMenuItem_Click" Header="No accounts yet. A_dd Account..." /> <MenuItem IsVisible="{Binding !AnyAccounts}" Click="noAccountsYetAddAccountToolStripMenuItem_Click" Header="No accounts yet. A_dd Account..." />
<!-- Scan Library --> <!-- Scan Library -->
<MenuItem IsVisible="{Binding OneAccount}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryToolStripMenuItem_Click" Header="Scan _Library" /> <MenuItem IsVisible="{Binding OneAccount}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryToolStripMenuItem_Click" Header="Scan _Library" />
<MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryOfAllAccountsToolStripMenuItem_Click" Header="Scan Library of _All Accounts" /> <MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryOfAllAccountsToolStripMenuItem_Click" Header="Scan Library of _All Accounts" />
<MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryOfSomeAccountsToolStripMenuItem_Click" Header="Scan Library of _Some Accounts" /> <MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding !ActivelyScanning}" Click="scanLibraryOfSomeAccountsToolStripMenuItem_Click" Header="Scan Library of _Some Accounts" />
<Separator /> <Separator />
<!-- Remove Books --> <!-- Remove Books -->
<MenuItem IsVisible="{Binding OneAccount}" IsEnabled="{Binding RemoveMenuItemsEnabled}" Click="removeLibraryBooksToolStripMenuItem_Click" Header="_Remove Library Books" /> <MenuItem IsVisible="{Binding OneAccount}" IsEnabled="{Binding RemoveMenuItemsEnabled}" Click="removeLibraryBooksToolStripMenuItem_Click" Header="_Remove Library Books" />
<MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding RemoveMenuItemsEnabled}" Click="removeAllAccountsToolStripMenuItem_Click" Header="_Remove Books from All Accounts" /> <MenuItem IsVisible="{Binding MultipleAccounts}" IsEnabled="{Binding RemoveMenuItemsEnabled}" Click="removeAllAccountsToolStripMenuItem_Click" Header="_Remove Books from All Accounts" />
@ -77,7 +79,7 @@
<Setter Property="Height" Value="NaN"/> <Setter Property="Height" Value="NaN"/>
</Style> </Style>
</MenuItem.Styles> </MenuItem.Styles>
<MenuItem IsEnabled="{Binding HasBookResults}" Click="exportLibraryToolStripMenuItem_Click" Header="E_xport Library" /> <MenuItem IsEnabled="{Binding LibraryStats.HasBookResults}" Click="exportLibraryToolStripMenuItem_Click" Header="E_xport Library" />
</MenuItem> </MenuItem>
<!-- Quick Filters Menu --> <!-- Quick Filters Menu -->
@ -149,7 +151,7 @@
</StackPanel> </StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal"> <StackPanel Grid.Column="1" Orientation="Horizontal">
<Button IsVisible="{Binding RemoveButtonsVisible}" Click="removeBooksBtn_Click" Height="30" Width="220" Content="{Binding RemoveBooksButtonText}"/> <Button IsVisible="{Binding RemoveButtonsVisible}" IsEnabled="{Binding RemoveBooksButtonEnabled}" Click="removeBooksBtn_Click" Height="30" Width="220" Content="{Binding RemoveBooksButtonText}"/>
<Button IsVisible="{Binding RemoveButtonsVisible}" Click="doneRemovingBtn_Click" Height="30" Width="160" Margin="10,0,0,0" Content="Done Removing Books"/> <Button IsVisible="{Binding RemoveButtonsVisible}" Click="doneRemovingBtn_Click" Height="30" Width="160" Margin="10,0,0,0" Content="Done Removing Books"/>
</StackPanel> </StackPanel>

View File

@ -53,7 +53,7 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
string existingFilter = _viewModel?.GridEntries?.Filter; string existingFilter = _viewModel?.GridEntries?.Filter;
var newEntries = ProductsDisplayViewModel.CreateGridEntries(dbBooks); var newEntries = ProductsDisplayViewModel.CreateGridEntries(dbBooks);
var existingSeriesEntries = bindingList.InternalList.SeriesEntries().ToList(); var existingSeriesEntries = bindingList.AllItems().SeriesEntries().ToList();
await Dispatcher.UIThread.InvokeAsync(() => bindingList.ReplaceList(newEntries)); await Dispatcher.UIThread.InvokeAsync(() => bindingList.ReplaceList(newEntries));
@ -65,9 +65,11 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
if (sEntry is SeriesEntrys2 se && !series.Liberate.Expanded) if (sEntry is SeriesEntrys2 se && !series.Liberate.Expanded)
await Dispatcher.UIThread.InvokeAsync(() => bindingList.CollapseItem(se)); await Dispatcher.UIThread.InvokeAsync(() => bindingList.CollapseItem(se));
} }
await Dispatcher.UIThread.InvokeAsync(() =>
bindingList.Filter = existingFilter; {
ReSort(); bindingList.Filter = existingFilter;
ReSort();
});
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@ -91,6 +91,9 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
RemovableCountChanged?.Invoke(this, 0); RemovableCountChanged?.Invoke(this, 0);
removeGVColumn.IsVisible = true; removeGVColumn.IsVisible = true;
foreach (var item in bindingList.AllItems())
item.PropertyChanged += Item_PropertyChanged;
try try
{ {
if (accounts is null || accounts.Length == 0) if (accounts is null || accounts.Length == 0)
@ -111,11 +114,6 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
foreach (var r in removable) foreach (var r in removable)
r.Remove = true; r.Remove = true;
RemovableCountChanged?.Invoke(this, GetAllBookEntries().Count(lbe => lbe.Remove is true));
foreach (var item in bindingList.AllItems())
item.PropertyChanged += Item_PropertyChanged;
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -8,16 +8,16 @@
x:Class="LibationWinForms.AvaloniaUI.Views.ProductsGrid.ProductsDisplay2"> x:Class="LibationWinForms.AvaloniaUI.Views.ProductsGrid.ProductsDisplay2">
<Grid> <Grid>
<DataGrid <DataGrid
Name="productsGrid" Name="productsGrid"
AutoGenerateColumns="False" AutoGenerateColumns="False"
Items="{Binding GridEntries}" Items="{Binding GridEntries}"
CanUserReorderColumns="True"> CanUserReorderColumns="True">
<DataGrid.Columns> <DataGrid.Columns>
<controls:DataGridCheckBoxColumnExt IsVisible="False" Header="Remove" IsThreeState="True" IsReadOnly="False" CanUserSort="True" Binding="{Binding Remove, Mode=TwoWay}" Width="70" SortMemberPath="Remove"/> <controls:DataGridCheckBoxColumnExt IsVisible="True" Header="Remove" IsThreeState="True" IsReadOnly="False" CanUserSort="True" Binding="{Binding Remove, Mode=TwoWay}" Width="70" SortMemberPath="Remove" />
<DataGridTemplateColumn CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate"> <DataGridTemplateColumn CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
@ -29,122 +29,144 @@
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover"> <DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Image Tapped="Cover_Click" Height="80" Source="{Binding Cover}" ToolTip.Tip="Click to see full size" /> <Image Tapped="Cover_Click" Height="80" Source="{Binding Cover}" ToolTip.Tip="Click to see full size" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title"> <DataGridTemplateColumn MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Title}" /> <Border Background="{Binding BackgroundBrush}" BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Title}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors"> <DataGridTemplateColumn MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Authors}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Authors}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators"> <DataGridTemplateColumn MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Narrators}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Narrators}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length"> <DataGridTemplateColumn Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Length}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Length}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series"> <DataGridTemplateColumn MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Series}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Series}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description"> <DataGridTemplateColumn MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock Tapped="Description_Click" VerticalAlignment="Center" TextWrapping="Wrap" ToolTip.Tip="Click to see full description" Text="{Binding Description}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock Tapped="Description_Click" VerticalAlignment="Center" TextWrapping="Wrap" ToolTip.Tip="Click to see full description" Text="{Binding Description}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category"> <DataGridTemplateColumn Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Category}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding Category}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="120" Header="Product&#xA;Rating" CanUserSort="True" SortMemberPath="ProductRating"> <DataGridTemplateColumn Width="120" Header="Product&#xA;Rating" CanUserSort="True" SortMemberPath="ProductRating">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" FontSize="11" Text="{Binding ProductRating}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" FontSize="11" Text="{Binding ProductRating}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="90" Header="Purchase&#xA;Date" CanUserSort="True" SortMemberPath="PurchaseDate"> <DataGridTemplateColumn Width="90" Header="Purchase&#xA;Date" CanUserSort="True" SortMemberPath="PurchaseDate">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding PurchaseDate}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" Text="{Binding PurchaseDate}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="120" Header="My Rating" CanUserSort="True" SortMemberPath="MyRating"> <DataGridTemplateColumn Width="120" Header="My Rating" CanUserSort="True" SortMemberPath="MyRating">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="Wrap" FontSize="11" Text="{Binding MyRating}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="Wrap" FontSize="11" Text="{Binding MyRating}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc"> <DataGridTemplateColumn Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<Border BorderThickness="3" Height="80"> <Panel Background="{Binding BackgroundBrush}">
<TextBlock VerticalAlignment="Center" TextWrapping="WrapWithOverflow" FontSize="10" Text="{Binding Misc}" /> <Border BorderThickness="3" Height="80">
</Border> <TextBlock VerticalAlignment="Center" TextWrapping="WrapWithOverflow" FontSize="10" Text="{Binding Misc}" />
</Border>
</Panel>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@ -166,6 +188,6 @@
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -66,31 +66,8 @@ namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
productsGrid = this.FindControl<DataGrid>(nameof(productsGrid)); productsGrid = this.FindControl<DataGrid>(nameof(productsGrid));
productsGrid.Sorting += ProductsGrid_Sorting; productsGrid.Sorting += ProductsGrid_Sorting;
productsGrid.CanUserSortColumns = true; productsGrid.CanUserSortColumns = true;
productsGrid.LoadingRow += ProductsGrid_LoadingRow;
removeGVColumn = productsGrid.Columns[0]; removeGVColumn = productsGrid.Columns[0];
} }
private static object tagObj = new();
private void ProductsGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
if (e.Row.Tag == tagObj)
return;
e.Row.Tag = tagObj;
static IBrush GetRowColor(DataGridRow row)
=> row.DataContext is GridEntry2 gEntry
&& gEntry is LibraryBookEntry2 lbEntry
&& lbEntry.Parent is not null
? App.SeriesEntryGridBackgroundBrush
: null;
e.Row.Background = GetRowColor(e.Row);
e.Row.DataContextChanged += (sender, e) =>
{
var row = sender as DataGridRow;
row.Background = GetRowColor(row);
};
}
} }
} }

View File

@ -53,7 +53,7 @@ namespace LibationWinForms
Min 1492 2316 Min 1492 2316
Q1 1562 2358 Q1 1562 2358
Med 1567 2379 Med 1567 2379
Q2 1567 2379 Q2 1600 2418
Max 2837 5835 Max 2837 5835
*/ */