Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改集合时如何发送事件?_C# - Fatal编程技术网

C# 修改集合时如何发送事件?

C# 修改集合时如何发送事件?,c#,C#,对不起,我是C#和活动的新手。 为什么我会收到NPE class WcfModel : IWcfModel { private List<ConsoleData> _dataList; public List<ConsoleData> DataList { get { return _dataList; } set { _dataList = value; DataArrived(_data

对不起,我是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;
}
类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)我这样做了,但过了一会儿。。。