WPF MVVM:ICommand绑定到控件
我完全失去了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
一个实例被分配给包含Button
的窗口的DataContext
。
给出的示例不起作用:我已将断点放入Save
方法,但执行不会传递给方法。 我已经看到了很多例子(在stackoverflow上),但无法弄清楚应该如何指定绑定。
请指教,任何帮助将不胜感激。
谢谢。
PS可能我需要在Button绑定中指定RelativeSource
...就像这样:
Command="{Binding Path=DataContext.Save, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
但是应该为祖先指定哪种类型?
你要做的是直接绑定到Save方法。 这不是如何去做。
假设您已将View的DataContext设置为CustomerViewModel的一个实例,那么您将如何绑定到SaveCommand:
<Button Content="Save" Margin="3" Command="{Binding SaveCommand}" />
您不必调用NotifyPropertyChanged("SaveCommand");
。