csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.1 KiB
83 lines
3.1 KiB
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Avalonia.Controls.Selection;
|
|
|
|
namespace Avalonia.Controls.Selection
|
|
{
|
|
public abstract class SelectionModelSelectionChangedEventArgs : EventArgs
|
|
{
|
|
/// <summary>
|
|
/// Gets the indexes of the items that were removed from the selection.
|
|
/// </summary>
|
|
public abstract IReadOnlyList<int> DeselectedIndexes { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the indexes of the items that were added to the selection.
|
|
/// </summary>
|
|
public abstract IReadOnlyList<int> SelectedIndexes { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the items that were removed from the selection.
|
|
/// </summary>
|
|
public IReadOnlyList<object?> DeselectedItems => GetUntypedDeselectedItems();
|
|
|
|
/// <summary>
|
|
/// Gets the items that were added to the selection.
|
|
/// </summary>
|
|
public IReadOnlyList<object?> SelectedItems => GetUntypedSelectedItems();
|
|
|
|
protected abstract IReadOnlyList<object?> GetUntypedDeselectedItems();
|
|
protected abstract IReadOnlyList<object?> GetUntypedSelectedItems();
|
|
}
|
|
|
|
public class SelectionModelSelectionChangedEventArgs<T> : SelectionModelSelectionChangedEventArgs
|
|
{
|
|
private IReadOnlyList<object?>? _deselectedItems;
|
|
private IReadOnlyList<object?>? _selectedItems;
|
|
|
|
public SelectionModelSelectionChangedEventArgs(
|
|
IReadOnlyList<int>? deselectedIndices = null,
|
|
IReadOnlyList<int>? selectedIndices = null,
|
|
IReadOnlyList<T>? deselectedItems = null,
|
|
IReadOnlyList<T>? selectedItems = null)
|
|
{
|
|
DeselectedIndexes = deselectedIndices ?? Array.Empty<int>();
|
|
SelectedIndexes = selectedIndices ?? Array.Empty<int>();
|
|
DeselectedItems = deselectedItems ?? Array.Empty<T>();
|
|
SelectedItems = selectedItems ?? Array.Empty<T>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the indexes of the items that were removed from the selection.
|
|
/// </summary>
|
|
public override IReadOnlyList<int> DeselectedIndexes { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the indexes of the items that were added to the selection.
|
|
/// </summary>
|
|
public override IReadOnlyList<int> SelectedIndexes { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the items that were removed from the selection.
|
|
/// </summary>
|
|
public new IReadOnlyList<T> DeselectedItems { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the items that were added to the selection.
|
|
/// </summary>
|
|
public new IReadOnlyList<T> SelectedItems { get; }
|
|
|
|
protected override IReadOnlyList<object?> GetUntypedDeselectedItems()
|
|
{
|
|
return _deselectedItems ??= (DeselectedItems as IReadOnlyList<object?>) ??
|
|
new SelectedItems<T>.Untyped(DeselectedItems);
|
|
}
|
|
|
|
protected override IReadOnlyList<object?> GetUntypedSelectedItems()
|
|
{
|
|
return _selectedItems ??= (SelectedItems as IReadOnlyList<object?>) ??
|
|
new SelectedItems<T>.Untyped(SelectedItems);
|
|
}
|
|
}
|
|
}
|
|
|