修改原始DataSource不会更新ComboBox

时间:2018-04-05 21:01:47

标签: c# winforms

我有一个ComboBoxDataSource设置为应用程序设置,如下所示

public DetailsForm()
{
    InitializeComponent();
    this.comboBox1.DataSource = TextSelectionSettings.Default.categories;
}

但我希望用户在运行时需要在组合框中添加额外的项目。所以我只是在文本框上做了一个简单的点击事件,以测试在列表中添加一个新字符串。

private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
    TextSelectionSettings.Default.categories.Add("test");
    TextSelectionSettings.Default.Save();
}

ComboBox未显示我添加到设置中的新字符串。

如何刷新ComboBox以显示设置中的更改?

    组合框中的
  • Refresh()功能无效。
  • 再次设置DataSource也不起作用。
  • 我无法使用Item方法将ComboBox直接添加到Items.Add(),因为设置了DataSource

1 个答案:

答案 0 :(得分:3)

为了使Windows窗体(和WPF)中的数据绑定能够正常工作,它必须具有某种变更通知,例如IBindingListINotifyCollectionChanged才能注意到这些变化。

  • 调用Refresh()仅用于绘画,不会刷新绑定
  • .DataSource设置为相同的内容无法正常工作(您不会更改任何内容,因此它不会将其视为更改)

解决方法是将.DataSource设置为null,然后再将其设置回集合。这会导致它重新评估绑定(因为它是与当前null不同的对象)并重置您的值。