C#强制ListBox更新元素

我是标准ListBox控件的子类。 我收到有关添加到列表中的任何元素的更改的通知。 任务是更新ListBox显示的文本以更改元素。

我知道我可以删除已更改的元素并再次添加它,但出于明显的原因,这似乎不太可取。

不幸的是, ListView中的数据绑定不支持常规(项)更改通知事件( FooChanged / INotifyPropertyChanged )。 但是,如果您了解更改,则可以获取列表以重新绑定自身。 由于您是子类,您可以调用:

 this.RefreshItems(); 

或单个项目:

 this.RefreshItem(index); 

否则,由于这不是公共的,您可以通过更改DisplayMember来模拟它:

 lb.DisplayMember = ""; lb.DisplayMember = "Bar"; 

可能有点hacky,但它可以工作,并保持当前的选择等(与清除DataSource不同)。

为什么不手动更新相关项目的文本? 您也可以考虑为ListBox推出自己的数据绑定机制。 并查看ObjectListView以查看它是否有任何帮助。