Xamarin.ios Dialog:如何从元素内访问父DialogViewController?抽头事件和Selected()方法之间的差异?

Xamarin.ios Dialog:如何从元素内访问父DialogViewController?抽头事件和Selected()方法之间的差异?,xamarin.ios,monotouch.dialog,Xamarin.ios,Monotouch.dialog,我正在将MonoTouch.Dialog中的StringElement子类化。 在那里,我可以附加到点击的事件,也可以覆盖Selected()。 如果我点击该元素,两个都会触发。 但是,Selected()允许我访问元素所属的对话框viewcontroller,该信息不会传递给点击的事件 这里的逻辑是什么?元素是否应该知道其对话框ViewController?如果是:如何从点击事件中获取控制器?通过查看Github上的源代码了解我自己。 触发点击事件的唯一位置是从Selected()。所以我认为

我正在将
MonoTouch.Dialog
中的
StringElement
子类化。 在那里,我可以附加到
点击的
事件,也可以覆盖
Selected()
。 如果我点击该元素,两个都会触发。 但是,
Selected()
允许我访问元素所属的
对话框viewcontroller
,该信息不会传递给
点击的
事件


这里的逻辑是什么?元素是否应该知道其
对话框ViewController
?如果是:如何从
点击
事件中获取控制器?

通过查看Github上的源代码了解我自己。 触发
点击事件的唯一位置是从
Selected()
。所以我认为Tapped实际上应该是类型
EventHandler
,而不是操作

public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
    if (Tapped != null)
        Tapped ();
    tableView.DeselectRow (indexPath, true);
}

在我编写这段代码时,我的想法很简单,使用lambdas,您可以将所需的任何状态传递给被点击的处理程序,而无需使用object/EventArgs模式

所以你可以这样做:

var dialogViewController = CreateDvC ();
new StringElement ("....", () => { 
    // reference any variables here
    // my container is:
    Console.Writeline (dialogViewController); 
}