Я создал новое WPF MVVM-приложение через интернет-шаблоны-> WPF в VS2010-> WPF MVVM-шаблоне проекта. Я создал флажок с надписью «Refresh Enabled»? рядом с кнопкой «Обновить», которую я хотел включить/отключить кнопку «Обновить» при нажатии. Я связал свой IsChecked
свой ящик с aMainWindowViewModel
имуществом, которое я назвал CanRefreshDate
, и он поднимает RaisePropertyChanged(()=>CanRefreshDate);
в своем сеттере. Также в MainWindowViewModel
я добавил свой недавно созданный CanExecuteRefreshDate()
, который возвращает свойство bool CanRefreshDate
. Однако, когда я нажимаю на этот флажок, кнопка «Обновить» никогда не включается/отключается для соответствия. Каков правильный способ исправить это, и это надзор в шаблоне или что?Использование VS2010 онлайн-шаблона «Шаблон проекта WPF MVVM», CanExecuteChanged не работает?
Вот мои изменения в код шаблона:
Xaml:
<CheckBox Content="Refresh Enabled?"
IsChecked="{Binding CanRefreshDate}"/>
MainWindowViewModel.cs:
private bool _CanRefreshDate;
public bool CanRefreshDate
{
get { return _CanRefreshDate; }
set
{
if (_CanRefreshDate != value)
{
_CanRefreshDate = value;
RaisePropertyChanged(() => CanRefreshDate);
}
}
}
public ICommand RefreshDateCommand { get { return new DelegateCommand(OnRefreshDate, CanExecuteRefreshDate); } }
private bool CanExecuteRefreshDate()
{
return CanRefreshDate;
}
Я заметил, что шаблон был RaiseCanExecuteChanged()
опечатка RasieCanExecuteChanged()
в DelegateCommand.cs и изменил это. Я был в состоянии получить все работает, удалив RaiseCanExecuteChanged()
и изменения
public event Handler CanExecuteChanged;
к:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
Однако, я хотел бы знать, что правильное решение для этого и почему шаблон doesn` т работы. Я что-то упустил, что-то не так, что ли? Создайте новое решение и используйте шаблон, который я сделал, и расскажите, что происходит! Благодаря!
автор ответил и выпустил версию 4.1 этого встроенного шаблона, который исправляет проблему –