C# 强制更新 ListBox 中的元素

6

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

我知道我可以只需删除更改的元素并再次添加它,但这似乎不是首选方法,原因显而易见。


可能是重复的问题:如何使ListBox刷新其项目文本? - Timwi
这不仅是上述问题的重复 - 另一个问题的答案更好。 - Timwi
2个回答

16

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

this.RefreshItems();

或者针对单个项目:

this.RefreshItem(index);
否则,由于这不是公开的,您可以通过更改 DisplayMember 来模拟它。
lb.DisplayMember = "";
lb.DisplayMember = "Bar";

可能有点小技巧性,但它能够工作,并且保留当前选择等内容(与清空DataSource不同)。


谢谢,看起来在MS Windows中,“有点hacky”的方法比文档记录的方法更有效。 - fnc12

1

为什么不手动更新问题项的文本?您还可以考虑为ListBox推出自己的数据绑定机制。并查看ObjectListView,看看它是否有所帮助。


ListBox并不关心元素显示的ToStrings是否已更改。无效也失败了。将查看ObjectListView,似乎很有趣。 :) - mafu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接