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

Wpf 删除所选项目后如何更改组合框选择?,wpf,data-binding,combobox,selection,Wpf,Data Binding,Combobox,Selection,我需要手动将ComboBox中的选定项更改为删除选定项时的第一项。ComboBox在ItemsSource中始终至少有一项 我尝试将IsSynchronizedWithCurrentItem设置为true,这解决了问题,但创建了另一个问题。我将多个组合框绑定到同一个ItemsSource,它会修改对所有项目的选择 我的组合框是这样的 // SelectedIndex 0 is to initially select the first item <ComboBox ItemsSource=

我需要手动将ComboBox中的选定项更改为删除选定项时的第一项。ComboBox在ItemsSource中始终至少有一项

我尝试将
IsSynchronizedWithCurrentItem
设置为true,这解决了问题,但创建了另一个问题。我将多个组合框绑定到同一个ItemsSource,它会修改对所有项目的选择

我的组合框是这样的

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

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

它将从集合本身的不同位置而不是视图中删除。实际上,有一种方法添加了新的相关项,删除了过时的项,然后调用reset on observable collection以通知组合框。除了这个特定的场景,它是有效的。组合框选择选项反映集合的实际状态,但当从集合中删除选定项时,选定项将设置为null。我可以用这行代码绕过它??第一项()但是ComboBox不会直观地更新它的选择。嗨,我不认为你的解决方案很难看,也许这是正确的方法。
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;
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);
    }
}