Команда Microsoft по шаблонам и практикам предлагает библиотеку Prism, которая несколько упрощает эту задачу.http://compositewpf.codeplex.com/
Они предоставляют класс с именем DelegateCommand
, который реализует ICommand
и позволяет передавать имя метода, который вы хотели бы выполнить.
public class Test {
public Test(){
SomeCommand = new DelegateCommand<object>(DoSomething);
}
public DelegateCommand<object> SomeCommand { get; private set;}
private void DoSomething(object parameter){
//Do some stuff
}
}
Затем вы можете привязать свойство Command ваших элементов управления к SomeCommand
.Вы также можете привязать CommandParameter к чему-либо, и он будет передан в качестве параметра в метод DoSomething.Дополнительный конструктор для DelegateCommand позволяет передавать метод CanExecute в качестве второго параметра, который включает / отключает элемент управления.Если вам нужно обновить статус включенного / отключенного элемента управления, вы можете вызвать метод DelegateCommand RaiseCanExecuteChanged()
.
public class Test {
public Test(){
SomeCommand = new DelegateCommand<object>(DoSomething, (enabled) => CanSave());
}
public DelegateCommand<object> SomeCommand { get; private set;}
private void DoSomething(object parameter){
//Do some stuff
}
private bool CanSave(){
if(/*test if the control should be enabled */)
return true;
else
return false;
}
private void DoABunchOfStuff(){
//something here means the control should be disabled
SomeCommand.RaiseCanExecuteChanged();
}
}