【问题标题】:Xamarin Forms - Send event to native and retrieve valueXamarin Forms - 将事件发送到本机并检索值
【发布时间】:2019-07-17 14:23:08
【问题描述】:

我目前正在制作一个自定义视图来预览设备的摄像头,并尝试触发“拍照”事件。

现在,我可以触发事件,但我没有找到将图片返回到 Xamarin Forms 共享代码的解决方案。

这是我在 Xamarin Forms 自定义控件中所做的事情:

public class CameraPreview : View
{
    public event EventHandler TakePictureRequested;

    public void TakePicture()
    {
        TakePictureRequested?.Invoke(this, EventArgs.Empty);
    }
}

这里来自 例如 Android 的原生代码

protected override void OnElementChanged(ElementChangedEventArgs<CameraPreview> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null)
        {
            e.OldElement.TakePictureRequested += OnTakePictureRequested;
        }
        if (e.NewElement != null)
        {
            if (Control == null)
            {
                cameraPreview = new CameraPreviewView(Context);
                SetNativeControl(cameraPreview);
            }
            Control.Preview = Camera.Open(getBackCameraId());

            e.NewElement.TakePictureRequested += OnTakePictureRequested;
        }
    }

    void OnTakePictureRequested(object sender, EventArgs e)
    {
        cameraPreview.TakePicture();
    }

这个想法是本机代码中的“OnTakePictureRequested”可以将值返回给 Xamarin 表单。

有人有想法吗? 谢谢

【问题讨论】:

  • 看看TaskCompletionSource。它非常简单,如果您仍然需要帮助,我们可以看看您尝试了什么
  • 你好@shanranm,我已经试过了,但似乎我无法从 Invoke 返回一些东西
  • 你需要等待TaskCompletionSource返回的Task
  • 是的,但它不适用于事件处理程序。 Invoke 是一个 void 函数,不能等待。我想要的是在我的自定义控件中检索信息。
  • 你想返回什么值?

标签: xamarin xamarin.forms


【解决方案1】:

在您的本机视图中通过

访问 Xamarin Forms 视图
var xamarinFormsView = e.NewElement as CameraPreview;
xamarinFormsView .DoSomethingAfterPictureTaken("blahblah");

并在CameraPreview 中添加一个方法来访问并使用您要发送的值执行某些操作

void DoSomethingAfterPictureTaken(string valueFromNative){
//access valuefromNative as you wish
}

【讨论】:

    【解决方案2】:

    也许你可以尝试使用MessagingCenter 来传递值

    Xamarin.Forms MessagingCenter 使视图模型和其他组件能够进行通信,而无需了解彼此之间的任何信息,除了一个简单的消息协定。它是一个静态类,具有在整个解决方案中使用的订阅和发送方法。

    你只需要Subscribe它在你的CameraPreview

    然后Send 来自您的CustomRenderer 的值。

    您可以参考MessagingCenter

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 2016-11-13
      • 2020-02-07
      • 2022-01-26
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多