使用方法を理解するには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 */;
}
ただし、小さな問題が1つあります。
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'}}" />
このアプローチには利点があると断言できます。これは、コマンドロジックをすべて1つのオブジェクトに保持し、内で発生する呼び出しCanExecute
を防ぐために使用できるためです。そのため、mvvmcrossバインディングのバグを見つけたら、それを修正してみてください。Execute
RelayCommand
CanExecute