Чтобы понять, как использовать CanExecute
, взгляните на Silverlight или WPF — существует множество блогов, в которых рассказывается, как использовать ICommand
— например, http://weblogs.asp.net/nmarun/archive/2009/12/02/using-icomand-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