删除所选项目时,我需要将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);
}
}
答案 0 :(得分:0)
您应该在删除代码之后立即调用OnPropertyChanged(“ SelectedItem”)。您遇到的问题是删除时未通知该属性。因此,对其进行相应的编码,即在删除操作之后,调用属性以更新组合框选定的项目