MvvmmCross昂贵的焦点更改事件



在我的MvvmCross项目中,用户通过设置Focus Change绑定更新editText后,我当前执行重新计算。

local:MvxBind="Text URL; FocusChange LoadItemsFromServer"

但是,如果用户按下OK按钮,它不会触发FocusChanged事件,并且用户最终在我们加载新项目之前提交。

是否有一种有意的方法来处理editText的昂贵操作,并确保它们在FocusChange事件之外执行到完成?如何确保焦点更改事件在执行按钮之前执行完毕。

如果您想确保在单击按钮之前完成一个方法/函数,可以使用can-execute禁用该命令。首先,你可以看这个(can execture在26:00开始(:第5集:MVVM&数据绑定。

如果你不想看视频,这是步骤:

  1. 创建一个变量来确定函数是否繁忙

    bool _is_busy
    public bool Is_Busy
    {
    get { return _is_busy; }
    set
    {
    _is_busy= value;
    OnPropertyChanged();
    SaveButtonCommand.ChangeCanExecute(); //this is the command you want to disable when it's busy or not
    }
    }
    
  2. 您将其添加到您的命令中:

    public YourViewModel()
    {
    SaveButtonCommand = new Command(async () => await SaveButton(), () => !Is_Busy);
    //if your command not async, you can use this: 
    //SaveButtonCommand = new Command(SaveButton, () => !Is_Busy);
    }
    
  3. 每当你有一个大函数时,你可以把这个代码放在函数的开头:

    Is_Busy = true;
    

并确保完成后将其设置为false。

相关内容

  • 没有找到相关文章

最新更新