Combobox - 在itemssource更改后更新并选择新添加的项目
Combobox - 在itemssource更改后更新并选择新添加的项目
我有一个简单的WPF表单,其中包含一个ComboBox和一个按钮。ComboBox的ItemSource是一个包含目录中文件名称的字典。按钮用于通过使用打开文件对话框来复制添加新文件。
我用于绑定的代码:
cmbClasses.ItemsSource = classList; cmbClasses.DisplayMemberPath = "Key"; cmbClasses.SelectedValuePath = "Value";
我希望在将新文件添加到字典后ComboBox可以刷新项目并将其设置为SelectedItem。
我尝试了以下代码来刷新,但没有效果:
cmbClasses.Items.Clear(); cmbClasses.ItemsSource = classList; cmbClasses.DisplayMemberPath = "Key"; cmbClasses.SelectedValuePath = "Value";
我在这里看到了一些问题,但没有一个能帮助我。有人知道我该如何做到这一点吗?
问题的原因是当下拉框的数据源发生变化时,无法自动更新并选中新添加的项。
解决方法是首先将ItemsSource绑定到一个能够通知属性变化事件的ObservableCollection或其他类似的对象。这样可以在列表变化时自动更新下拉框。然后将选中的值绑定到另一个属性,并动态设置该值为刚刚添加的值。
可以通过以下代码实现:
// 定义ObservableCollection用于绑定下拉框的数据源 public ObservableCollectionItemsSource { get; set; } = new ObservableCollection (); // 定义选中的值 private string selectedValue; public string SelectedValue { get { return selectedValue; } set { selectedValue = value; RaisePropertyChanged(nameof(SelectedValue)); } } // 添加新项到数据源并选中 ItemsSource.Add("New Item"); SelectedValue = "New Item";
使用ObservableDictionary也是一种解决方法。ObservableDictionary在变化时会触发通知,可以满足需求。此外,还有其他类似的类,如ObservableList
参考链接:
- [Binding ComboBox SelectedItem using MVVM](https://stackoverflow.com/questions/19632270)
- [Can I bind my ItemsControl to a Dictionary?](http://drwpf.com/blog/2007/09/16/can-i-bind-my-itemscontrol-to-a-dictionary/)