|
|
|
@ -34,11 +34,14 @@ namespace Avalonia.Controls.Utils |
|
|
|
get => _selectionModel; |
|
|
|
set |
|
|
|
{ |
|
|
|
value = value ?? throw new ArgumentNullException(nameof(value)); |
|
|
|
UnsubscribeFromSelectionModel(_selectionModel); |
|
|
|
_selectionModel = value; |
|
|
|
SubscribeToSelectionModel(_selectionModel); |
|
|
|
SyncSelectedItemsWithSelectionModel(); |
|
|
|
if (_selectionModel != value) |
|
|
|
{ |
|
|
|
value = value ?? throw new ArgumentNullException(nameof(value)); |
|
|
|
UnsubscribeFromSelectionModel(_selectionModel); |
|
|
|
_selectionModel = value; |
|
|
|
SubscribeToSelectionModel(_selectionModel); |
|
|
|
SyncSelectedItemsWithSelectionModel(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -49,16 +52,19 @@ namespace Avalonia.Controls.Utils |
|
|
|
{ |
|
|
|
value ??= new AvaloniaList<object?>(); |
|
|
|
|
|
|
|
if (value.IsFixedSize) |
|
|
|
if (_selectedItems != value) |
|
|
|
{ |
|
|
|
throw new NotSupportedException( |
|
|
|
"Cannot assign fixed size selection to SelectedItems."); |
|
|
|
} |
|
|
|
if (value.IsFixedSize) |
|
|
|
{ |
|
|
|
throw new NotSupportedException( |
|
|
|
"Cannot assign fixed size selection to SelectedItems."); |
|
|
|
} |
|
|
|
|
|
|
|
UnsubscribeFromSelectedItems(_selectedItems); |
|
|
|
_selectedItems = value; |
|
|
|
SubscribeToSelectedItems(_selectedItems); |
|
|
|
SyncSelectionModelWithSelectedItems(); |
|
|
|
UnsubscribeFromSelectedItems(_selectedItems); |
|
|
|
_selectedItems = value; |
|
|
|
SubscribeToSelectedItems(_selectedItems); |
|
|
|
SyncSelectionModelWithSelectedItems(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -226,6 +232,12 @@ namespace Avalonia.Controls.Utils |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void SelectionModelSourceReset(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
SyncSelectionModelWithSelectedItems(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void SubscribeToSelectedItems(IList selectedItems) |
|
|
|
{ |
|
|
|
if (selectedItems is INotifyCollectionChanged incc) |
|
|
|
@ -238,6 +250,7 @@ namespace Avalonia.Controls.Utils |
|
|
|
{ |
|
|
|
model.PropertyChanged += SelectionModelPropertyChanged; |
|
|
|
model.SelectionChanged += SelectionModelSelectionChanged; |
|
|
|
model.SourceReset += SelectionModelSourceReset; |
|
|
|
} |
|
|
|
|
|
|
|
private void UnsubscribeFromSelectedItems(IList selectedItems) |
|
|
|
@ -252,6 +265,7 @@ namespace Avalonia.Controls.Utils |
|
|
|
{ |
|
|
|
model.PropertyChanged -= SelectionModelPropertyChanged; |
|
|
|
model.SelectionChanged -= SelectionModelSelectionChanged; |
|
|
|
model.SourceReset -= SelectionModelSourceReset; |
|
|
|
} |
|
|
|
|
|
|
|
private static int IndexOf(object? source, object? item) |
|
|
|
|