0

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中有一个字段(控制器),我用它来引用事件。现在我有一个具有相同概念的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这样的,它应该起作用吗?

如何从不同的班级引发相同的事件?

4

2 回答 2

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...
}
于 2014-09-11T11:33:39.843 回答
0

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

于 2014-09-11T11:34:25.760 回答