如何在Mvvmcross中使用CanExecute我有一个按钮我有一个命令我想启用/禁用使用DisconnectCommandDisconnectCommand.CanExecute(this.GetService().UsbConnected);但这显然是错误的(它不起作用),我将检查作为参数,但通常我会做DisconnectCommand.CanExecute=someBool;但是属性没有设置,那么如何解决这个问题呢?要了解如何使用CanExecute,请查看Silverlight或WPF-那里有很多关于如何使用ICommand的博客-例如http://weblogs.asp.net/nmarun/archive/2009/12/02/using-icommand-silverlight-4.aspx或http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx一个例子是:privateMvxRelayCommand_disconnectCommand;publicIMvxCommandDisconnectCommand{get{if(_disconnectCommand==null)_disconnectCommand=newMvxRelayCommand(this.GetService().Disconnect,item=>this.IsItemConnected(item));}返回_disconnectCommand;}}privatevoidSomeServiceNotificationHandler(){_disconnectCommand.RaisePropertyChanged();}privateboolIsItemConnected(objectthing){return/*你的代码*/;有一个小问题……CanExecute并没有真正在所有平台上的所有MvxBindings中完全实现……它适用于其中一些,但对于其中一些它不会——我还不知道哪些!如果您遇到问题让我知道(通过GitHub问题),它们将得到修复......就个人而言......我不倾向于使用CanExecute-我倾向于有一个单独的布尔属性,然后我绑定到任何可用的在控件属性上——例如,大多数控件都有Enabled、IsEnabled、Disabled、IsDisabled等。我通常发现设置布尔属性比调用RaiseCanExecuteChanged更容易(也更易读)例如,我会使用类似的东西:你可以肯定地说CanExecute方法有优点——因为它将Command逻辑保存在一个对象中,并且因为它可以用来防止在RelayCommand中发生Execute调用。这就是为什么我很乐意尝试修复mvvmcross绑定中的CanExecute错误。要跟进Stuart的回答,很容易同时支持ICommand.CanExecute并公开属性以支持Android和iOSMvx绑定。为此,将典型的CanExecute()方法转换为一个属性,然后添加一个处理程序以在关联的属性上调用RaisePropertyChanged。然后正常使用RaiseCanExecuteChanged,也会触发PropertyChanged事件。以上就是C#学习教程:如何在Mvvmcross中使用CanExecute分享的全部内容。如果对你有用,需要了解更多C#学习教程,希望你多多关注——...//constructorpublicSomeClass(){DoSomethingCommand=newMvxCommand(OnDoSomething,()=>CanDoSomething);DoSomethingCommand.CanExecuteChanged+=(sender,args)=>RaisePropertyChanged(()=>CanDoSomething);}publicboolCanDoSomething{get{...}}...本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
