MVVMで使用されているコマンドバインディングを完全に失いました。オブジェクトをウィンドウにバインドしたり、そのコマンドをコントロールにバインドして、メソッドを取得するにはどうすればよいButton
Click
ですか?
これがCustomerViewModel
クラスです:
public class CustomerViewModel : ViewModelBase
{
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(), param => this.CanSave);
NotifyPropertyChanged("SaveCommand");
}
return _saveCommand;
}
}
public void Save()
{
...
}
public bool CanSave { get { return true; } }
...
ViewModelBase
INotifyPropertyChanged
インターフェイスを実装しますButton
。コマンドにバインドする方法は次のとおりです。
<Button Content="Save" Margin="3" Command="{Binding DataContext.Save}" />
のインスタンスは、を含むウィンドウのにCustomerViewModel
割り当てられます。DataContext
Button
与えられた例は機能していません:メソッドにブレークポイントを入れましたSave
が、実行がメソッドに渡されません。私は(スタックオーバーフローでも)多くの例を見てきましたが、バインディングをどのように指定すべきか理解できません。
アドバイスしてください、どんな助けでもありがたいです。
ありがとう。
PSおそらく私RelativeSource
はボタンバインディングで指定する必要があります...このようなもの:
Command="{Binding Path=DataContext.Save, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
しかし、どのタイプを祖先に指定する必要がありますか?