c# - Xamarin Forms 事件冒泡和调用自定义渲染器上的操作

标签 c# xamarin icommand eventhandler xamarin.forms

我正在创建一个自定义 Xamarin Forms 控件,其中在 View 内包含三个按钮 (1,2,3)。在本示例中,我们将其称为 GaugeView。以下是当前的设置方式:

  • GuageView 在 iOS 和 Android 上都有一个名为 GuageViewRenderer 的自定义渲染器。
  • GuageView 公开 Clicked1Clicked2Clicked3 的事件处理程序。
  • GuageView 公开 Click1Click2Click3ICommand 属性.

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

我计划在自定义渲染器内部连接命令和事件处理程序,但我用它很麻烦,因为事件只能从原始类中触发(GuageView)。

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

最佳答案

是的,您不能在声明事件的类之外引发事件。因此,您必须向 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 中,每当您需要通知 View 单击了按钮时:

Element.RaiseClick1();

关于c# - Xamarin Forms 事件冒泡和调用自定义渲染器上的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906996/

相关文章:

android - Xamarin.Android:获取 Firebase 存储下载 URL

c# - 向任何自定义控件添加命令属性

wpf - 从语义上讲,Commands 和 Converters 应该更接近 Views 还是 ViewModels?

c# - Azure AD 联合注销未重定向到客户端应用程序

c# - 将CGContext生成图片的方法从ios翻译到mac

c# - 在 C# WinForm 控件(文本框、组合框、标签)中显示 SQL 数据库中的数据

c# - Xamarin iOS : How to open a . pdf 文件使用默认阅读器?

c# - 异步 ICommand 实现

c# - LINQ - 从同一对象的多个属性中选择多个

c# - 可以为 C++ 应用程序编写 C# DLL(插件)吗?