Merge pull request #735 from EjiHuang/fix/duplicate-items-in-multicombobox

fix: Prevent duplicate items in MultiComboBox SelectedItems by adding…
This commit is contained in:
Dong Bin
2025-07-25 11:38:55 +08:00
committed by GitHub

View File

@@ -15,7 +15,7 @@ public class MultiComboBoxItem: ContentControl
private static readonly Point s_invalidPoint = new (double.NaN, double.NaN); private static readonly Point s_invalidPoint = new (double.NaN, double.NaN);
private Point _pointerDownPoint = s_invalidPoint; private Point _pointerDownPoint = s_invalidPoint;
private bool _updateInternal; private bool _updateInternal;
public static readonly StyledProperty<bool> IsSelectedProperty = AvaloniaProperty.Register<MultiComboBoxItem, bool>( public static readonly StyledProperty<bool> IsSelectedProperty = AvaloniaProperty.Register<MultiComboBoxItem, bool>(
nameof(IsSelected)); nameof(IsSelected));
@@ -24,7 +24,7 @@ public class MultiComboBoxItem: ContentControl
get => GetValue(IsSelectedProperty); get => GetValue(IsSelectedProperty);
set => SetValue(IsSelectedProperty, value); set => SetValue(IsSelectedProperty, value);
} }
static MultiComboBoxItem() static MultiComboBoxItem()
{ {
IsSelectedProperty.AffectsPseudoClass<MultiComboBoxItem>(PseudoClassName.PC_Selected); IsSelectedProperty.AffectsPseudoClass<MultiComboBoxItem>(PseudoClassName.PC_Selected);
@@ -52,8 +52,13 @@ public class MultiComboBoxItem: ContentControl
{ {
base.OnAttachedToLogicalTree(e); base.OnAttachedToLogicalTree(e);
_parent = this.FindLogicalAncestorOfType<MultiComboBox>(); _parent = this.FindLogicalAncestorOfType<MultiComboBox>();
if(this.IsSelected) if (this.IsSelected &&
_parent?.SelectedItems?.Add(this.DataContext); _parent is not null &&
_parent.SelectedItems is not null &&
!_parent.SelectedItems.Contains(this.DataContext))
{
_parent.SelectedItems.Add(this.DataContext);
}
} }
protected override void OnPointerPressed(PointerPressedEventArgs e) protected override void OnPointerPressed(PointerPressedEventArgs e)
@@ -103,7 +108,7 @@ public class MultiComboBoxItem: ContentControl
base.OnAttachedToVisualTree(e); base.OnAttachedToVisualTree(e);
UpdateSelection(); UpdateSelection();
} }
internal void UpdateSelection() internal void UpdateSelection()
{ {
_updateInternal = true; _updateInternal = true;