Я полностью потерял привязку команд, которая используется в MVVM. Как мне привязать мой объект к окну и/или его команде к элементу управления, чтобы получить метод, вызванный на Button
Click
?WPF MVVM: ICommand Связывание с элементами управления
Вот 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
, но выполнение не переходит к методу. Я видел много примеров (также в потоке stackoverflow), но не могу понять, как следует указывать привязку.
Просьба сообщить, любая помощь будет оценена.
Спасибо.
P.S. Возможно, мне нужно указать RelativeSource
в Баттона связывающим ... что-то вроде этого:
Command="{Binding Path=DataContext.Save, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
но какой тип должен быть определен для предка?
Существуют ли какие-либо ошибки привязки в выводе программы? Ошибки привязки часто остаются необнаруженными. Вы также должны попробовать Snoop. Это инструмент, который подключается к вашему запущенному приложению и может также выявлять ошибки привязки. – Thorsten79