【问题标题】:Xamarin Forms MVVM Validating a form with a Busy IndicatorXamarin Forms MVVM 使用忙碌指示器验证表单
【发布时间】:2019-06-06 23:24:11
【问题描述】:

我使用 James Montenagro 的 MVVMHelpers 模型开发了一个 Xamarin Forms 应用程序。我的一个页面是一个动态创建的表单,它是根据加载到应用程序中的表单的 XML 定义构建的。然后应用程序创建必要的布局和字段。

当需要验证表单时,我的应用会循环遍历页面上创建的各种控件,并根据表单定义验证输入以确保表单已正确完成。这一切都很好,并由“保存”按钮命令触发。问题是应用程序看起来没有响应需要几秒钟。

没问题,我想只是添加

Acr.Userdialogs.Instance.Loading("正在验证表单,请稍候")

在我进行验证以显示活动指示器之前。但是我已经尝试过并阅读了它,当然它不起作用,因为我的验证在命令处理程序中都是同步的,并且 UI 没有得到更新。

接下来我尝试使用

将我的验证函数移动到一个线程中

等待Task.Run(() => ValidateForm());

但这也不起作用,因为线程需要访问视图中的各种 UI 控件,并且由于它没有创建它们而不允许这样做。现在我被困住了。如何在循环浏览 UI 元素以验证它们时显示繁忙指示器 - 将表单元素中的所有“答案”放入列表并单独验证它们没有意义,因为它是循环通过我假设的控件正在抓紧时间……

【问题讨论】:

    标签: xamarin mvvm xamarin.forms


    【解决方案1】:

    如果您需要在 UI 线程上异步执行验证,请尝试以下操作:

    Device.BeginInvokeOnMainThread (async() => {
      await ValidateForm();
    })
    

    【讨论】:

    • 谢谢 - 一直在努力研究如何实现这一点,因为我还需要能够检查状态。所以例如我的代码是 bool status = false; Device.BeginInvokeOnMainThread(async () => { status = await ValidateAndSaveForm(); }); if (!status) { UserDialogs.Instance.Alert(Constants.Constants.Messages.Error_FormQuestions, "Error");这里明显的问题是我在验证完成之前检查状态,因为它在一个单独的线程上......
    猜你喜欢
    • 2017-05-25
    • 2018-11-04
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多