|
|
|
@ -82,6 +82,7 @@ namespace Perspex.Controls.Primitives |
|
|
|
private object _selectedItem; |
|
|
|
private IList _selectedItems; |
|
|
|
private bool _ignoreContainerSelectionChanged; |
|
|
|
private bool _syncingSelectedItems; |
|
|
|
private IList _clearSelectedItemsAfterDataContextChanged; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -150,8 +151,10 @@ namespace Perspex.Controls.Primitives |
|
|
|
{ |
|
|
|
if (SelectedItems.Count != 1 || SelectedItems[0] != effective) |
|
|
|
{ |
|
|
|
_syncingSelectedItems = true; |
|
|
|
SelectedItems.Clear(); |
|
|
|
SelectedItems.Add(effective); |
|
|
|
_syncingSelectedItems = false; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (SelectedItems.Count > 0) |
|
|
|
@ -283,6 +286,7 @@ namespace Perspex.Controls.Primitives |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
protected override void OnDataContextFinishedChanging() |
|
|
|
{ |
|
|
|
if (_clearSelectedItemsAfterDataContextChanged == SelectedItems) |
|
|
|
@ -661,7 +665,10 @@ namespace Perspex.Controls.Primitives |
|
|
|
case NotifyCollectionChangedAction.Remove: |
|
|
|
if (SelectedItems.Count == 0) |
|
|
|
{ |
|
|
|
SelectedIndex = -1; |
|
|
|
if (!_syncingSelectedItems) |
|
|
|
{ |
|
|
|
SelectedIndex = -1; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
@ -679,7 +686,11 @@ namespace Perspex.Controls.Primitives |
|
|
|
MarkContainerSelected(item, false); |
|
|
|
} |
|
|
|
|
|
|
|
SelectedIndex = -1; |
|
|
|
if (!_syncingSelectedItems) |
|
|
|
{ |
|
|
|
SelectedIndex = -1; |
|
|
|
} |
|
|
|
|
|
|
|
SelectedItemsAdded(SelectedItems); |
|
|
|
break; |
|
|
|
|
|
|
|
@ -694,7 +705,7 @@ namespace Perspex.Controls.Primitives |
|
|
|
MarkItemSelected(item, true); |
|
|
|
} |
|
|
|
|
|
|
|
if (SelectedItem != SelectedItems[0]) |
|
|
|
if (SelectedItem != SelectedItems[0] && !_syncingSelectedItems) |
|
|
|
{ |
|
|
|
var oldItem = SelectedItem; |
|
|
|
var oldIndex = SelectedIndex; |
|
|
|
@ -723,7 +734,7 @@ namespace Perspex.Controls.Primitives |
|
|
|
MarkItemSelected(item, true); |
|
|
|
} |
|
|
|
|
|
|
|
if (SelectedItem == null) |
|
|
|
if (SelectedItem == null && !_syncingSelectedItems) |
|
|
|
{ |
|
|
|
var index = IndexOf(Items, items[0]); |
|
|
|
|
|
|
|
|