我在 MonoTouch.Dialog
中为 StringElement
子群。在那里,我可以附加到Tapped
事件上,也可以覆盖Selected()
。如果我点击元素,则两者都会开火。但是,Selected()
让我访问DialogViewController
该元素是一个成员,其中此信息未传递给Tapped
事件。
这里有什么逻辑?一个元素是否应该知道其DialogViewController
?如果是:如何从Tapped
事件中获取控制器?
通过查看github上的来源来发现自己。Tapped
事件触发的唯一位置来自Selected()
。因此,我认为实际上应该通过类型EventHandler
而不是动作。
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
if (Tapped != null)
Tapped ();
tableView.DeselectRow (indexPath, true);
}
在我编写该代码时,这个想法简直就是使用lambdas,您可以将需要的任何状态传递给敲击的处理程序,而无需使用对象/eventargs模式。
因此,您会做类似的事情:
var dialogViewController = CreateDvC ();
new StringElement ("....", () => {
// reference any variables here
// my container is:
Console.Writeline (dialogViewController);
}