我正在做Xamarin Android应用程序,我不想执行the命令,尽管它是Executing.What是解决方案吗?
我的代码是:
var asd = Mvx.Resolve<MyAddressesViewModel> ();
asd.ItemSelect.CanExecute (false);发布于 2015-09-29 03:31:06
您可以在创建命令的实例时传入委托(可能是MyAddressesViewModel中的MvxCommand。
所以大概是这样的:
class MyAddressesViewModel
{
public ICommand ItemSelect
{
get
{
return new MvxCommand(
() => {}, // Delegate when command gets invoked
() => true); // Delegate to determine CanExecute
}
}
}或者类似的东西。
还要注意,正如Dhruv提到的,您还需要使用ChangeCanExecute方法触发命令的PropertyChanged事件,以实际调用您在构造函数中注册的CanExecute委托。
发布于 2015-09-28 21:04:32
调用ChangeCanExecute()方法。
发布于 2015-10-01 04:57:05
您需要为MvxCommand提供一个委托,通过调用该委托来确定用户是否可以执行该命令。您还需要告诉Mvvm Cross何时使用RaiseCanExecuteChanged手动更新CanExecute状态。
下面是一个为您提供登录按钮的示例,该按钮仅在用户填写了EmployeeId且用户当前未尝试登录时才会启用:
(ViewModel):
private bool _signInAttemptInProgress;
protected bool SignInAttemptInProgress
{
get { return _signInAttemptInProgress; }
set
{
_signInAttemptInProgress = value;
SignInCommand.RaiseCanExecuteChanged();
}
}
private string _employeeId;
public string EmployeeId
{
get { return _employeeId; }
set
{
_employeeId = value;
RaisePropertyChanged(() => EmployeeId);
SignInCommand.RaiseCanExecuteChanged();
}
}
private MvxCommand _signInCommand;
public IMvxCommand SignInCommand
{
get { return _signInCommand ?? (_signInCommand = new MvxCommand(async () => await OnSignInCommand(), CanExecuteSignInCommand)); }
}
private bool CanExecuteSignInCommand()
{
return !SignInAttemptInProgress && !string.IsNullOrEmpty(EmployeeId);
}
private async Task OnSignInCommand()
{
SignInAttemptInProgress = true;
// Do stuff here. The user can't click the SignIn command inside here.
SignInAttemptInProgress = false;
// The user can click the SignIn command again below here.
}如果让您自己的IMvxCommand实现防止自己在当前执行时再次执行,那会更干净。这样就不需要在ViewModels中添加额外的SignInAttemptInProgress样式属性了。
https://stackoverflow.com/questions/32821876
复制相似问题