我在一个单独的类文件中有我的自定义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?它似乎是另一种类型。