Aby dowiedzieć się, jak używać CanExecute
, spójrz na Silverlight lub WPF - istnieje wiele blogów, które mówią o tym, jak używać ICommand
- np. http://weblogs.asp.net/nmarun/archive/2009/12/02/using-icommand-silverlight-4.aspx lub http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx
Przykładem może być coś takiego:
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 */;
}
Jest jeden mały problem chociaż ....
CanExecute
tak naprawdę nie jest w pełni wdrożony we wszystkich MvxBindings całej wszystkie platformy ... Dla niektórych z nich zadziała, ale dla niektórych z nich nie będzie - i tak naprawdę nie wiem, które są obecnie! Jeśli natkniesz się na kwestii, to proszę dać mi znać (przez problemy GitHub) i będą one dostać stałe ...
osobiście ... Nie mają tendencję do używania CanExecute
- staram zamiast użyć oddziel własność Boolean, którą następnie wiążę z jakąkolwiek właściwością dostępną na kontrole - np Większość kontrole mają coś podobnego Enabled
, IsEnabled
, Disabled
, IsDisabled
itd
ja generalnie łatwiej (i bardziej czytelny) ustawić właściwość logiczna zamiast zadzwonić RaiseCanExecuteChanged
np Chciałbym użyć coś takiego:
<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'}}" />
Można zdecydowanie twierdzą, że podejście CanExecute
ma swoje zalety - ponieważ utrzymuje logikę polecenia w jednym obiekcie, i dlatego może być stosowany w celu zapobiegania Execute
połączeń zachodzących w RelayCommand
. Dlatego cieszę się, że próbuję naprawiać błędy CanExecute
w powiązaniach mvvmcross, gdy je znajdziemy.
Czy 'UsbConnected' jest metodą lub właściwością? –
Jest to własność – Mech0z