C# 修改集合时如何发送事件?
对不起,我是C#和活动的新手。 为什么我会收到NPEC# 修改集合时如何发送事件?,c#,C#,对不起,我是C#和活动的新手。 为什么我会收到NPE class WcfModel : IWcfModel { private List<ConsoleData> _dataList; public List<ConsoleData> DataList { get { return _dataList; } set { _dataList = value; DataArrived(_data
class WcfModel : IWcfModel
{
private List<ConsoleData> _dataList;
public List<ConsoleData> DataList
{
get { return _dataList; }
set { _dataList = value;
DataArrived(_dataList); // NPE
}
}
public event Action<List<ConsoleData>> DataArrived;
}
类WcfModel:IWcfModel
{
私有列表(dataList),;
公共列表数据列表
{
获取{return\u dataList;}
设置{u dataList=value;
DataArrived(_dataList);//NPE
}
}
公共事件行动数据;
}
如果没有订阅事件的对象(即代理没有订阅服务器),则它将为null
。您需要对此进行测试:
set {
_dataList = value;
var dataDel = DataArrived;
if(dataDel != null)
dataDel(_dataList);
}
或者,使用-它为集合的更改内置了事件。如果没有订阅事件的对象(即委托没有订阅服务器),则它将为
null
。您需要对此进行测试:
set {
_dataList = value;
var dataDel = DataArrived;
if(dataDel != null)
dataDel(_dataList);
}
或者,使用-它为集合的更改内置了事件。而是使用
ObservableCollection
,它有自己的事件发布程序
class WcfModel : IWcfModel
{
private ObservableCollection<ConsoleData> _dataList;
public WcfModel ()
{
_dataList = new ObservableCollection<ConsoleData>();
_dataList.CollectionChanged += DataArrived
}
public ObservableCollection<ConsoleData> DataList
{
get { return _dataList; }
}
public event Action<object, NotifyCollectionChangedEventArgs> DataArrived;
}
当您订阅WcfModel
中的DataArrived
事件时,您将收到通知
希望这能有所帮助。不如使用
ObservableCollection
,它有自己的事件发布程序
class WcfModel : IWcfModel
{
private ObservableCollection<ConsoleData> _dataList;
public WcfModel ()
{
_dataList = new ObservableCollection<ConsoleData>();
_dataList.CollectionChanged += DataArrived
}
public ObservableCollection<ConsoleData> DataList
{
get { return _dataList; }
}
public event Action<object, NotifyCollectionChangedEventArgs> DataArrived;
}
当您订阅WcfModel
中的DataArrived
事件时,您将收到通知
希望这有帮助。您应该为事件添加一个空检查程序,如下代码所示:
class WcfModel: IWcfModel
{
private List<ConsoleData> _dataList;
public List<ConsoleData> DataList
{
get { return _dataList; }
set
{
_dataList = value;
if ( DataArrived != null )
DataArrived ( _dataList );
}
}
public event Action<List<ConsoleData>> DataArrived;
}
类WcfModel:IWcfModel
{
私有列表(dataList),;
公共列表数据列表
{
获取{return\u dataList;}
设置
{
_数据列表=值;
如果(数据到达!=null)
数据到达(_数据列表);
}
}
公共事件行动数据;
}
您应该为事件添加一个空检查程序,如下代码所示:
class WcfModel: IWcfModel
{
private List<ConsoleData> _dataList;
public List<ConsoleData> DataList
{
get { return _dataList; }
set
{
_dataList = value;
if ( DataArrived != null )
DataArrived ( _dataList );
}
}
public event Action<List<ConsoleData>> DataArrived;
}
类WcfModel:IWcfModel
{
私有列表(dataList),;
公共列表数据列表
{
获取{return\u dataList;}
设置
{
_数据列表=值;
如果(数据到达!=null)
数据到达(_数据列表);
}
}
公共事件行动数据;
}
您需要像这样初始化数据到达变量吗<代码>model.DataArrived+=新操作(model_DataArrived)代码>我会这样做,但过一会儿…您需要像那样初始化DataArrived变量吗<代码>model.DataArrived+=新操作(model_DataArrived)代码>我这样做了,但过了一会儿。。。