[英]How to trigger an event form parent to child
我有一个具有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()
{
}
}
如果我对您的理解正确,那么是否要为每个添加到Column
项的ColumnValueChangedEvent
订阅到AddColumn
类?
如果是,则不可能,因为List<T>
不提供任何机制将项目添加到列表时告诉继承的类。
您应该创建一个不继承List<T>
的新类型。 它应该实现IList<T>
或其他取决于您的要求。 然后在实现中, Add(Column column)
方法只需订阅事件。
您需要做的是: 将列表更改为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;
此代码将触发该事件。 请注意,最好在函数中进行扭曲
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.