|
|
@@ -46,6 +46,10 @@ public partial class AvaloniaDataGrid : UserControl, INotifyPropertyChanged
|
|
|
AvaloniaProperty.Register<AvaloniaDataGrid, AvaloniaDataGridSelectionMode>(nameof(SelectionMode), AvaloniaDataGridSelectionMode.Single);
|
|
|
public static StyledProperty<double> RowHeightProperty =
|
|
|
AvaloniaProperty.Register<AvaloniaDataGrid, double>(nameof(RowHeight), 30);
|
|
|
+ public static DirectProperty<AvaloniaDataGrid, IEnumerable<object?>> SelectedItemsProperty =
|
|
|
+ AvaloniaProperty.RegisterDirect<AvaloniaDataGrid, IEnumerable<object?>>(nameof(SelectedItems),
|
|
|
+ grid => grid.SelectedItems,
|
|
|
+ (grid, v) => grid.SelectedItems = v);
|
|
|
|
|
|
public static StyledProperty<AvaloniaDataGridColumns?> ColumnsProperty =
|
|
|
AvaloniaProperty.Register<AvaloniaDataGrid, AvaloniaDataGridColumns?>(nameof(Columns), null);
|
|
|
@@ -93,7 +97,38 @@ public partial class AvaloniaDataGrid : UserControl, INotifyPropertyChanged
|
|
|
|
|
|
public AvaloniaDataGridColumns Columns { get; private set; }
|
|
|
|
|
|
- public IEnumerable<object?> SelectedItems => Grid.SelectedItems.Cast<object?>();
|
|
|
+ public IEnumerable<object?> SelectedItems
|
|
|
+ {
|
|
|
+ get => SelectionMode == AvaloniaDataGridSelectionMode.Multiple ? _selectedItems : Grid.SelectedItems.Cast<object?>();
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if(SelectionMode == AvaloniaDataGridSelectionMode.Multiple)
|
|
|
+ {
|
|
|
+ _selectedItems.Clear();
|
|
|
+ if (value is not null)
|
|
|
+ {
|
|
|
+ foreach(var item in value)
|
|
|
+ {
|
|
|
+ _selectedItems.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(Grid.CollectionView is not null)
|
|
|
+ {
|
|
|
+ foreach(var item in _selectedItems)
|
|
|
+ {
|
|
|
+ if (!Grid.SelectedItems.Contains(item) && Grid.CollectionView.Contains(item))
|
|
|
+ {
|
|
|
+ Grid.SelectedItems.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Grid.SelectedItem = value?.FirstOrDefault();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
public event EventHandler<AvaloniaDataGridSelectionChangedEventArgs>? SelectionChanged;
|
|
|
public event EventHandler<AvaloniaDataGridRefreshRequestedEventArgs>? RefreshRequested;
|
|
|
@@ -192,6 +227,17 @@ public partial class AvaloniaDataGrid : UserControl, INotifyPropertyChanged
|
|
|
{
|
|
|
ItemCount = (Grid.CollectionView as DataGridCollectionView)?.ItemCount ?? 0;
|
|
|
UpdateSummaryRow();
|
|
|
+
|
|
|
+ if(SelectionMode == AvaloniaDataGridSelectionMode.Multiple && Grid.CollectionView is not null)
|
|
|
+ {
|
|
|
+ foreach(var item in _selectedItems)
|
|
|
+ {
|
|
|
+ if (!Grid.SelectedItems.Contains(item) && Grid.CollectionView.Contains(item))
|
|
|
+ {
|
|
|
+ Grid.SelectedItems.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void Columns_Changed(AvaloniaDataGridColumns columns)
|
|
|
@@ -284,9 +330,9 @@ public partial class AvaloniaDataGrid : UserControl, INotifyPropertyChanged
|
|
|
Grid.SelectedItems.Remove(item);
|
|
|
}
|
|
|
}
|
|
|
- foreach(var item in e.RemovedItems)
|
|
|
+ foreach(var item in _selectedItems)
|
|
|
{
|
|
|
- if (_selectedItems.Contains(item))
|
|
|
+ if (!Grid.SelectedItems.Contains(item) && Grid.CollectionView.Contains(item))
|
|
|
{
|
|
|
Grid.SelectedItems.Add(item);
|
|
|
}
|