Wpf 删除所选项目后如何更改组合框选择?
我需要手动将ComboBox中的选定项更改为删除选定项时的第一项。ComboBox在ItemsSource中始终至少有一项 我尝试将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=
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);
}
}