Я новичок в Silverlight и у меня есть некоторые проблемы, связанные с командами. У меня есть DataGrid, который привязан к ObservableCollection в моей ViewModel. У меня тоже есть кнопка
<Button Command="{Binding AddCommand}">Add</Button>
какое свойство Command связано с командой ViewModel.
Командный класс выглядит так
public class GenericCommand : ICommand
{
public event EventHandler CanExecuteChanged;
private Action<object> execute;
private Func<object, bool> canExecute;
private bool previousState;
public GenericCommand(Action<object> execute, Func<object, bool> canExecute)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (canExecute == null) return false;
bool currentState = canExecute(parameter);
if (currentState != previousState)
{
previousState = currentState;
if (CanExecuteChanged != null)
CanExecuteChanged(this, new EventArgs());
return currentState;
}
return currentState;
}
public void Execute(object parameter)
{
if (execute == null) return;
execute(parameter);
}
}
свойство AddCommand было создано таким образом
AddCommand = new GenericCommand(Add,CanAdd);
public bool CanAdd(object param)
{
return SelectedItem != null;
}
public void Add(object param)
{
}
Проблема в том, что кажется, что CommandBinding не реагирует на изменения SelectedItem. Если я запускаю приложение, ни одна из строк сетки не выбрана, я вижу, что вызывается функция CanAdd. Однако, если я нажимаю на какой-то элемент, функция CanAdd не вызывается - несмотря на то, что я вижу, что свойство SelectedItem в представлении модели изменилось ?? Что я делаю не так?
Можно ли использовать команды без какой-либо внешней библиотеки?
Раньше я писал подобный код в WPF, однако в WPF в классе GeneriCommand я использовал
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested += value;
}
remove
{
CommandManager.RequerySuggested -= value;
}
}
Проблема в том, что в Silverlight нет такой вещи, как CommandManager.