在我的MvvmCross项目中,用户通过设置Focus Change绑定更新editText后,我当前执行重新计算。
local:MvxBind="Text URL; FocusChange LoadItemsFromServer"
但是,如果用户按下OK按钮,它不会触发FocusChanged事件,并且用户最终在我们加载新项目之前提交。
是否有一种有意的方法来处理editText的昂贵操作,并确保它们在FocusChange事件之外执行到完成?如何确保焦点更改事件在执行按钮之前执行完毕。
如果您想确保在单击按钮之前完成一个方法/函数,可以使用can-execute禁用该命令。首先,你可以看这个(can execture在26:00开始(:第5集:MVVM&数据绑定。
如果你不想看视频,这是步骤:
-
创建一个变量来确定函数是否繁忙
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 } }
-
您将其添加到您的命令中:
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); }
-
每当你有一个大函数时,你可以把这个代码放在函数的开头:
Is_Busy = true;
并确保完成后将其设置为false。