例如一个选手机号的程序,有一系列手机号可选。有些手机号已经被人选走了,列表仍然显示它们,但多加一条删除线,如图。
如图,淡色的、被线划掉的就是已经被选走的。这样的功能该如何实现呢?
具体要求
外界可以把这种控件视为ListBox,加元素就是Items.Add,删元素就是Items.Remove。外界不应去关心如何“假删”。
此控件的应用范围应更为广泛,允许用模板来自定义被删除后的显示。
另外,出于个人爱好,此控件内部应尽量简单,少写代码;不重复发明微软专家已经发明的轮子。
实现
class RetainRemovedListBox : ListBox
{
public RetainRemovedListBox()
{
((INotifyCollectionChanged)Items).CollectionChanged += Class1_CollectionChanged;
}
void Class1_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
Items.Insert(e.OldStartingIndex, e.OldItems[0]);