我正在为学校编写一个WinForms应用程序,其中向用户显示一个标志,并且必须从comboBox中选择适当的国家/地区。我使用Flag类型的List作为comboBox的数据源...
List<Flag> flags;
comboBox.DataSource = flags;
转了之后,我从列表中删除了前一个标志并更新了comboBox DataSource ......
flags.Remove(currentFlag);
comboBox.DataSource = flags;
我发现该标志正在从列表中删除,但不会从comboBox中删除。我哪里错了?
答案 0 :(得分:2)
这样做,
flags.Remove(currentFlag);
comboBox.DataSource = null;
comboBox.DataSource = flags;
答案 1 :(得分:0)
这里的根问题是ComboBox在数据源发生变化时没有收到任何类型的通知,所以很明显它没有视觉上刷新,因为它没有意识到发生的任何事情。
不太理想的解决方案是 Sajeetharan 建议的,要删除列表并再次添加。这迫使控件重新读取整个列表,因此它会捕获&#34;更改,删除现在丢失的项目。
更好的解决方案是使用适当的集合类型,为控件提供更改通知,并允许它根据需要重绘。这是BindingList<T>
class的目的。在设置绑定的数据源而不是普通列表时,通常建议使用它。
简而言之,您的代码将成为:
<uses-permission android:name="android.permission.CALL_PHONE" />
之后,您只需从中删除一个项目:
BindingList<Flag> flags = new BindingList<Flag>();
comboBox.DataSource = flags;
数据绑定引擎负责从组合中删除项目。