ViewModel のパブリック プロパティとして公開されている限り、これらのコマンドをバインドするために必要な特別なことはありません。私は同じ状況にあったので、これが私がそれをどのように行ったかの私自身の実装です。
まず、基本クラスで ICommand タイプの OKCommand / CancelCommand を定義します。Execute および CanExecute メソッドに関する限り、私はそれらを保護された仮想メソッドとして定義しています (ちなみに、コマンドを仮想として定義することもできます。これにより、ボタンの可視性モードを折りたたみに設定する XAML スタイルを記述できるようになります。コマンド値は null です)。派生したViewModel内では、必要に応じてコマンド、ExecuteおよびCanExecuteメソッドをオーバーライドするだけですが、ビューからは常にコマンド名に直接バインドするだけです。
以下は、私が今あなたに説明したことの例です。
public abstract class ViewModelbase
{
private DelegateCommand _okCommand;
public virtual DelegateCommand OkCommand
{
get { return _okCommand ?? (_okCommand = new DelegateCommand(OkExecuteCommand, CanOkExecute)); }
}
protected virtual void OkExecuteCommand()
{
DialogResult = true;
}
protected virtual bool CanOkExecute()
{
return IsValid;
}
}
次に、基本ViewModelクラスから派生した具体的なViewModelクラスを定義するだけです
public class SampleViewModel : ViewModelbase
{
//If u have defined XAML style which sets viability of button as collapsed if its command value is null u simply override command
public override DelegateCommand OkCommand { get { return null; } }
protected override void OkExecuteCommand()
{
do whatever u want as this is a command execution
}
}
XAML の部分では、基本クラスがない場合と同様に、ボタン コマンドを Viewmodel コマンドにバインドするだけで特別なことをする必要はありません。
ここでの重要な点は、基本 ViewModel クラスから public 修飾子を使用してコマンドを公開する必要があることです (必要なのは getter だけなので、このコードはコマンドを公開できる 1 つの方法のサンプルを提供します)。