我正在创建标准ListBox控件的子类。我会收到添加到列表中的任何元素更改的通知。任务是更新ListBox显示的更改元素的文本。
我知道我可以只需删除更改的元素并再次添加它,但这似乎不是首选方法,原因显而易见。
我正在创建标准ListBox控件的子类。我会收到添加到列表中的任何元素更改的通知。任务是更新ListBox显示的更改元素的文本。
我知道我可以只需删除更改的元素并再次添加它,但这似乎不是首选方法,原因显而易见。
不幸的是,ListView
中的数据绑定不支持常规(项)变更通知事件(FooChanged
/ INotifyPropertyChanged
)。但是,如果您了解更改,则可以使列表重新绑定自身。由于您正在子类化,因此可以调用:
this.RefreshItems();
或者针对单个项目:
this.RefreshItem(index);
否则,由于这不是公开的,您可以通过更改 DisplayMember
来模拟它。lb.DisplayMember = "";
lb.DisplayMember = "Bar";
可能有点小技巧性,但它能够工作,并且保留当前选择等内容(与清空DataSource
不同)。
为什么不手动更新问题项的文本?您还可以考虑为ListBox推出自己的数据绑定机制。并查看ObjectListView,看看它是否有所帮助。