使用EventArgs和Event定义Eventhandler以在多个类中工作



我在一个单独的类文件中有我的自定义EventArgs,稍后我可以从不同的类引用它:

using System;
using System.Collections.Generic;
namespace SplitView
{
    public class RowSelectedEventArgs:EventArgs {
        public Patient selectedRow { get; set; }
        public RowSelectedEventArgs(Patient selectedRow) : base(){
            this.selectedRow = selectedRow;
        }
    }
}

在我的MasterViewController中,我定义了我的事件

public event EventHandler<RowSelectedEventArgs> RowClicked;

MasterViewController中的DataSource中,我可以引发事件:

if (this.controller.RowClicked != null) {
    this.controller.RowClicked (this, new RowSelectedEventArgs (this.controller.list [indexPath.Row]));
}

正如您所看到的,我在数据源中有一个字段(控制器),我用它引用事件。现在我有了一个具有相同概念的SearchSource(也称为控制器的字段)。现在在SearchSource中,我想引发事件:

if (this.controller.RowClicked != null) {
    this.controller.RowClicked (this, new RowSelectedEventArgs (this.list [indexPath.Row]));
}

但我有

事件"SplitView.MasterViewController.RowClicked"只能出现在类型之外使用时,位于+=或-=的左侧"SplitView.MasterViewController"

唯一的区别是SearchSource不是类MasterViewController的一部分(与DataSource一样)。但是事件是public,所以它应该工作吗?

我如何从不同的班级发起同一个事件?

不能直接在定义此事件的类型之外引发事件。您所能做的就是一种方法,它将从外部引发事件:

public sealed class MyClass
{
    // this should be called from inside
    private void OnSomeEvent()
    {
        var handler = SomeEvent;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
    // this should be called from outside
    public void RaiseSomeEvent()
    {
        OnSomeEvent(); 
    }
    public event EventHandler SomeEvent;
    // other code here...
}

SearchSource中的字段控制器是否也用于类型MasterViewController?它似乎是另一种类型。

相关内容

  • 没有找到相关文章

最新更新