2

我正在创建一个自定义 Xamarin Forms 控件,该控件在视图中包含三个按钮 (1,2,3)。GaugeView为了这个例子,我们只称它为 a 。以下是它当前的设置方式:

  • GuageViewiOS 和 Android 上都有一个名为GuageViewRenderer.
  • GuageView公开Clicked1Clicked2和的事件处理程序Clicked3
  • GuageView公开、和的ICommand属性。Click1Click2Click3

问题是,我需要从自定义渲染器中触发事件处理程序,因为只有本机平台控件知道何时按下其中一个按钮。您如何将事件冒泡到GuageView共享代码所在的位置?

我计划在自定义渲染器中连接命令和事件处理程序,但我有一段时间使用它,因为事件只能从原始类 ( GuageView) 中触发。

有没有更好的方法来构建它?我要做的主要事情是公开平台本机参数并将其按钮连接起来,以便共享代码 ( GuageView) 中的事件处理程序获得事件触发。

4

2 回答 2

3

是的,您不能在声明它们的类之外引发事件。所以你必须添加一个方法来GaugeView引发事件。我也会用同样的方法调用命令。所以在GaugeView

public void RaiseClick1() {
    var clicked1 = Clicked1;
    if (clicked1 != null)
        clicked1(this, EventArgs.Empty);

    if (Command1 != null && Command1.CanExecute(Command1Paramter))
         Command1.Execute(Command1Parameter);
}

然后在GaugeViewRender您需要通知视图单击按钮时:

Element.RaiseClick1();
于 2015-08-09T18:38:05.220 回答
1

迟到的答案,但可能是为了将来:您可以使用 IButtonController 接口从外部引发按钮的单击事件。

Xamarin.Forms.Button 类实现了这个接口,它提供了一个方法:SendClicked

通过将渲染器 (this.Element) 中的 Xamarin.Forms 元素转换为 IButtonController,您可以调用此方法并引发 Xamarin.Forms.Button 的单击事件。

我还创建了一篇关于这个主题的博客文章:http: //software.fauland.cc/ ?p=5637

于 2017-02-14T08:03:18.993 回答