我将自定义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]));
}
正如您所看到的,我在 DataSource 中有一个字段( controller ),我用它来引用该事件。现在我有一个具有相同概念的 SearchSource (也称为 controller 字段)。现在在 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
所以它应该有用吗?
如何从不同的课程中提出相同的事件?
答案 0 :(得分:3)
您无法直接在该类型之外引发事件,该事件定义此事件。 您所能做的就是一种方法,它将从外部引发事件:
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...
}
答案 1 :(得分:0)
搜索源中的字段控制器是否也适用于MasterViewController类型? 它似乎是一种不同的类型。