我目前需要一个自定义 ListViewItem
类 - 我们称它为 MyListViewItem
。它需要有一些与每个项目关联的附加数据,并在 Checked 属性更改时执行一些操作。我已经尝试了几件事,但目前相关代码如下所示:
class MyListViewItem : ListViewItem {
new public bool Checked {
get {
return base.Checked;
}
set {
base.Checked = value;
// do some other things here based on value
}
}
public MyListViewItem(Object otherData) {
// ...
}
}
我遇到的问题是,当我单击 ListView 中项目的复选框时,我的 setter 从未被调用。有谁知道我做错了什么?我知道我可以使用父 ListView 的 ItemChecked 事件,但这似乎是一个不太干净的解决方案。 (此外,我实际上并没有将对象传递给构造函数,但这部分在这里并不重要)。
最佳答案
它不起作用,因为“new”关键字没有覆盖它只是“隐藏”。
这意味着如果您在通过 MyListViewItem 的类型定义引用的对象实例上调用 Checked,您将运行您的代码。但是,ListView 通过 ListViewItem 的类型定义引用此对象,因此不会调用您的"new"方法。
"new"不是覆盖。更好的解决方案可能是在自定义 ListView 中处理代码。它并没有那么丑。
关于C# 继承和重写基本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858081/