C# 如何从父级到子级触发事件
我有一个列类,它有两个属性名称和值,另一个类(ColumnList)作为集合继承它,我想将一个事件从父类引发到子类,这意味着列值的更改应该在ColumnList类中触发。C# 如何从父级到子级触发事件,c#,events,delegates,C#,Events,Delegates,我有一个列类,它有两个属性名称和值,另一个类(ColumnList)作为集合继承它,我想将一个事件从父类引发到子类,这意味着列值的更改应该在ColumnList类中触发。 下面是我的代码 public class Column { private string colName; private string colValue; public string Name { get { return colNam
下面是我的代码
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()
{
}
}
公共类列
{
私有字符串colName;
私有字符串colValue;
公共字符串名
{
得到
{
返回colName;
}
设置
{
colName=值;
if(ColumnValueChangedEvent!=null)
ColumnValueChangedEvent(null,null);
}
}
公共字符串值
{
得到
{
返回colValue;
}
设置
{
colValue=值;
if(ColumnValueChangedEvent!=null)
ColumnValueChangedEvent(null,null);
}
}
公共事件栏目ValueChangedLegate栏目ValueChangedEvent;
public delegate void ColumnValueChangedDelegate(对象发送方,事件参数e);
}
公共类AddColumn:列表
{
公共AddColumn()
:base()
{
}
}
如果我理解正确,您想为您的AddColumn
类中添加的每个列
项订阅ColumnValueChangedEvent
如果是,这是不可能的,因为List
不提供任何机制来告诉继承的类何时将项添加到列表中
您应该创建一个不从
列表继承的新类型。它应该实现IListIList
或者其他一些取决于您的需求的东西。然后在Add(Column Column)
方法的实现中,只需订阅事件。如果我理解正确,您想为AddColumn
类中每个添加的Column
项订阅ColumnValueChangedEvent
如果是,这是不可能的,因为List
不提供任何机制来告诉继承的类何时将项添加到列表中
您应该创建一个不从列表继承的新类型。它应该实现IListIList
或者其他一些取决于您的需求的东西。然后在Add(Column列)
方法的实现中,只需订阅事件即可。您需要做的是:
将列表更改为ObservableCollection如下所示:
public class AddColumn : ObservableCollection<Column>
{
public AddColumn()
: base()
{
}
}
按Tab Vs将生成如下函数:
private static void Test_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// put what ever u need here
}
****这不一定是静态的****
更新:
如果要更改项目中的文件,请执行以下操作:
例如,假设您想更改addColumn[0]
处的name字段。
您可以按如下方式进行操作:
var item = addColumn[0];
item.Name = "New VAlue";
addColumn[0] = item.Name;
此代码将触发事件。
注意:最好在函数中扭曲它您需要做的是:
将列表更改为ObservableCollection如下所示:
public class AddColumn : ObservableCollection<Column>
{
public AddColumn()
: base()
{
}
}
按Tab Vs将生成如下函数:
private static void Test_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// put what ever u need here
}
****这不一定是静态的****
更新:
如果要更改项目中的文件,请执行以下操作:
例如,假设您想更改addColumn[0]
处的name字段。
您可以按如下方式进行操作:
var item = addColumn[0];
item.Name = "New VAlue";
addColumn[0] = item.Name;
此代码将触发事件。
请注意,最好将其扭曲到函数中Check InotifyProperty Changed and ObservableCollection如果有任何答案帮助您关闭问题Check InotifyProperty Changed and ObservableCollection如果有任何答案帮助您关闭问题谢谢,在我添加列时它会按要求工作。现在我需要一个事件如果任何项的值发生了更改,则表示集合中的名称或值发生了更改在Replace方法中,您可以更改整个项并使事件发生。谢谢,当我添加列时,它会按要求工作。现在我需要一个事件,如果任何项的值发生更改,则表示集合中的名称或值发生更改。在Replace方法中,您可以更改整个项并引发事件