1

我正在继承一个StringElementin MonoTouch.Dialog。在那里我可以附加到Tapped事件或者我可以覆盖Selected(). 如果我点击元素,两者都会触发。但是,Selected()是让我访问DialogViewController该元素的成员,该信息不会传递给Tapped事件。

这里的逻辑是什么?一个元素是否应该知道它DialogViewController?如果是:那么如何从事件中获取控制器Tapped

4

2 回答 2

1

在我编写该代码时,想法很简单,即使用 lambda,您可以将所需的任何状态传递给您的 Tapped 处理程序,而无需使用 object/EventArgs 模式。

所以你会做这样的事情:

var dialogViewController = CreateDvC ();
new StringElement ("....", () => { 
    // reference any variables here
    // my container is:
    Console.Writeline (dialogViewController); 
}
于 2012-10-18T12:38:39.163 回答
1

通过查看 Github 上的源代码发现了自己。触发事件的唯一地方Tapped是 from Selected()。所以我认为 Tapped 真的应该按类型EventHandler而不是 Action。

public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
    if (Tapped != null)
        Tapped ();
    tableView.DeselectRow (indexPath, true);
}
于 2012-10-17T11:55:57.677 回答