删除所选项目后如何更改组合框选择?

时间:2018-07-30 10:09:05

标签: wpf data-binding combobox selection

删除所选项目时,我需要将ComboBox所选项目手动更改为第一个。 ComboBox在ItemsSource中始终至少有1个项目。

我尝试将IsSynchronizedWithCurrentItem设置为true可以解决此问题,但是又创建了一个问题,我将多个ComboBox绑定到同一个ItemsSource,并修改了所有选择。

我的ComboBox看起来像这样

// SelectedIndex 0 is to initially select the first item
<ComboBox ItemsSource="{Binding Items}" SelectedIndex="0"
          SelectedItem="{Binding SelectedItem}" />

ViewModel

public ObservableCollection<Item> Items { get; }
public Item SelectedItem
{
    get => _selectedItem;
    set
    {
        if (Equals(_selectedItem, value))
        {
            return;
        }

        _selectedItem = value ?? Items.First();
        OnPropertyChanged(nameof(SelectedItem));
    }
}

private Item _selectedItem;

其余的XAML代码取决于SelectedItem的值,并且它会根据其值进行相应的更改,尽管删除所选项目时ComboBox的可视选择仍然为空。

我在做什么错了?

修改:我可以使用此丑陋的解决方案对其进行修复

public partial class ComboBoxWithDefaultSelection : ComboBox
{
    public int DefaultSelectedIndex { get; set; }

    protected override void OnSelectionChanged(SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count == 0)
        {
            SelectedIndex = DefaultSelectedIndex;
        }

        base.OnSelectionChanged(e);
    }
}

1 个答案:

答案 0 :(得分:0)

您应该在删除代码之后立即调用OnPropertyChanged(“ SelectedItem”)。您遇到的问题是删除时未通知该属性。因此,对其进行相应的编码,即在删除操作之后,调用属性以更新组合框选定的项目