За да разберете как да използвате 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
Пример би бил нещо като:
private MvxRelayCommand _disconnectCommand;
public IMvxCommand DisconnectCommand
{
get
{
if (_disconnectCommand == null)
_disconnectCommand = new MvxRelayCommand(this.GetService<IConnectionService>().Disconnect, item => this.IsItemConnected(item));
return _disconnectCommand;
}
}
private void SomeServiceNotificationHandler()
{
_disconnectCommand.RaisePropertyChanged();
}
private bool IsItemConnected(object thing)
{
return /* your code */;
}
Има обаче един малък проблем....
CanExecute
всъщност не е напълно внедрен във всички MvxBindings във всички платформи... Ще работи за някои от тях, но за някои от тях няма - и аз наистина не знам кои в момента! Ако срещнете проблеми, моля, уведомете ме (чрез проблеми с GitHub) и те ще бъдат коригирани...
Лично... не съм склонен да използвам CanExecute
- вместо това имам склонност да използвам отделно булево свойство, което след това обвързвам с каквото и свойство да е налично в контролата - напр. повечето контроли имат нещо като Enabled
, IsEnabled
, Disabled
, IsDisabled
и т.н.
Обикновено намирам за по-лесно (и по-разбираемо) да задам булевото свойство, вместо да извикам RaiseCanExecuteChanged
напр. Бих използвал нещо като:
<Button
android:id="@+id/ButtonConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Disconnect"
local:MvxBind="{'Click':{'Path':'DisconnectCommand'},'Enabled':{'Path':'UsbConnected'}}" />
Определено можете да твърдите, че подходът CanExecute
има предимства - защото запазва логиката на командите в един обект и защото може да се използва за предотвратяване на Execute
извиквания, случващи се в рамките на RelayCommand
. Ето защо се радвам да се опитам да поправя CanExecute
бъгове в mvvmcross обвързвания, когато ги открием.
person
Stuart
schedule
18.10.2012
UsbConnected
метод ли е или свойство? - person Daniel Hilgarth   schedule 18.10.2012