我有一个具有2个属性Name和Value的列类,另一个类(ColumnList)将其继承为一个集合,我想将一个事件从父类引发到子类,这意味着应在ColumnList中触发列值的更改类。
下面是我的代码
public class Column
{
private string colName;
private string colValue;
public string Name
{
get
{
return colName;
}
set
{
colName = value;
if (ColumnValueChangedEvent != null)
ColumnValueChangedEvent(null, null);
}
}
public string Value
{
get
{
return colValue;
}
set
{
colValue = value;
if (ColumnValueChangedEvent != null)
ColumnValueChangedEvent(null, null);
}
}
public event ColumnValueChangedDelegate ColumnValueChangedEvent;
public delegate void ColumnValueChangedDelegate(object sender, EventArgs e);
}
public class AddColumn : List<Column>
{
public AddColumn()
: base()
{
}
}
答案 0 :(得分:1)
如果我对您的理解正确,您想为ColumnValueChangedEvent
类中添加的每个Column
项目订阅AddColumn
吗?
如果是,则不可能,因为List<T>
不提供任何机制来告知将项目添加到列表的继承类。
您应该创建一个不继承自List<T>
的新类型。它应该实现IList<T>
或其他取决于您的要求。然后,在Add(Column column)
方法的实现中,只需订阅事件即可。
答案 1 :(得分:1)
您需要做的是: 将列表更改为ObservableCollection ,如下所示:
public class AddColumn : ObservableCollection<Column>
{
public AddColumn()
: base()
{
}
}
然后在您的代码中可以按以下方式调用它:
var addColumn = new AddColumn();
addColumn.CollectionChanged += Test_CollectionChanged;
按Tab键将生成一个功能,如下所示:
private static void Test_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// put what ever u need here
}
****这不一定是静态的****
更新:
如果要更改项目中的“归档”,请执行以下操作:
例如,假设您要更改addColumn[0]
上的名称字段。
您可以按照以下步骤进行操作:
var item = addColumn[0];
item.Name = "New VAlue";
addColumn[0] = item.Name;
此代码将触发该事件。 请注意,最好在函数中使用它