2

我有一个这样的列表属性

protected IList<System.Windows.Media.Color> colors;    
public IList<System.Windows.Media.Color> Colors
{
     get { return colors; }
     set { colors = value; }
}

我有一个功能

protected void updateBuffers()

每次属性用户更改属性时都需要调用它,例如

Colors.Add(...)
...
Colors.Clear(...)

有没有一种优雅的简单方法可以做到这一点?

4

2 回答 2

4

您可以使用 List 作为基类来创建一个创建其他属性的新对象:

public class CustomList<T> : List<T>
{
    public new void Add(T item) {
        base.Add(item);
        this.UpdateBuffers();
    }
}

'new' 关键字是完全覆盖 Add 的现有实现所必需的,它没有virtual在基类中标记为。

感谢 Hans Passant 和 LarsTech 在评论中的反馈。

于 2013-07-12T11:51:30.803 回答
2

你不能用一个简单的列表。但是,您可以创建自己的类实现IList<T>或继承自Collection<T>.

或者您可以使用一个ObservableCollection<T>或任何内置类实现INotifyCollectionChanged

有关文档,请参阅MSDN

此外,如果您使用 ObservableCollection 在 WPF 或 Windows 8 应用程序中填充 UI,则可以在绑定中使用您的集合。

于 2013-07-12T11:56:17.247 回答