当Collection被修改时如何发送事件
本文关键字:何发送 事件 修改 Collection | 更新日期: 2023-09-27 18:15:06
对不起,我是c#新手,尤其是事件。为什么我会收到NPE?
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;
}
如果没有对象订阅事件(即委托没有订阅者),它将是null
。您需要对此进行测试:
set {
_dataList = value;
var dataDel = DataArrived;
if(dataDel != null)
dataDel(_dataList);
}
或者,使用ObservableCollection<ConsoleData>
-它已经内置了事件来更改集合。
不如使用ObservableCollection<ConsoleData>
,它有自己的事件发布者。
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;
}
现在当你做
wcfModelInstance.DataList.Add(new ConsoleData("hello"));
当您订阅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;
}