我正在创建一个自定义Xamarin Forms控件,它在视图中包含三个按钮(1,2,3)。为了这个例子,我们只是称它为GaugeView
。以下是目前的设置方式:
GuageView
在iOS和Android上都有一个名为GuageViewRenderer
的自定义渲染器。GuageView
公开Clicked1
,Clicked2
和Clicked3
的事件处理程序。GuageView
公开了ICommand
,Click1
和Click2
的{{1}}个属性。问题是,我需要从自定义渲染器触发事件处理程序,因为只有本机平台控件知道何时按下了其中一个按钮。如何将事件重新发送回Click3
,这是共享代码所在的位置?
我计划将命令和事件处理程序连接到自定义渲染器中,但是因为事件只能从原始类中触发({{1 }})。
有没有更好的方法来构建它?我要做的主要事情是暴露平台本机guage并连接其按钮,以便共享代码(GuageView
)中的事件处理程序获取事件发生。
答案 0 :(得分: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();
答案 1 :(得分:-1)
迟到的答案,但可能是将来:您可以使用IButtonController界面从外部提升按钮的click事件。
Xamarin.Forms.Button类实现了这个接口,它提供了一个方法:SendClicked
通过将渲染器(this.Element)中的Xamarin.Forms元素强制转换为IButtonController,您可以调用此方法并引发Xamarin.Forms.Button的单击事件。
我还创建了一篇关于此主题的博文:http://software.fauland.cc/?p=5637