2012-03-27 3 views
1

У меня есть метод моей команды CanExecute, который вызывается только один раз, когда запускается приложение wpf. Я хочу периодически переоценивать этот метод. Я нашел некоторые ссылки на вызов CommandManager.InvalidateRequerySpected() либо программно, либо с помощью DispatcherTimer. Ни для меня, ни для CanExecute не работает только один раз для каждого приложения.CommandManager.InvalidateRequerySposed() не работает

Кто-нибудь знает об исправлении?

-pom-

+0

Возможно, нужно позвонить через 'Application.Current.Dispatcher.Invoke?' Http://stackoverflow.com/a/15828850 – Benjol

ответ

3

Я читал об этой технике, но это не тот, который я использовал, или что я думаю, что обычно используется. Обычно я бы использовал DelegateCommand из Prism или RelayCommand из света MVVM. Они реализуют ICommand с событием CanExecuteChanged. Затем вы отвечаете за повышение этого события, когда изменяется состояние вашей модели представления, например.

public class MyViewModel 
{ 
    DelegateCommand _myCommand; 

    public MyViewModel() 
    { 
     _myCommand = new DelegateCommand(ExecuteMyCommand, CanExecuteMyCommand); 
    } 

    public ICommand MyCommand 
    { 
     get{ return _myCommand; } 
    } 

    private void ExecuteMyCommand(){ ... } 
    private bool CanExecuteMyCommand() { return true/false; } 

    // for example 
    public int SomeProperty 
    { 
     get{ ... } 
     set{ 
     ...; 
     if(...){ 
      _myCommand.RaiseCanExecuteChanged(); 
     } 
     } 
    } 
} 

Не совсем то, что вы искали, но я надеюсь, что это поможет.

+0

Полезно знать, спасибо за ответ! Я соглашусь на это через несколько дней, если не появится ответ без рамки. Благодарю. – Pompair

+0

К сожалению, по крайней мере RelayCommand от MVVMLight внутренне использует CommandManager.InvalidateRequerySposed, поэтому он не имеет никакого отношения к использованию RaiseCanExecuteChanged или к команде диспетчера команд. (Я попытался опубликовать фактический код в комментарии, но он выглядит не принимает форматирования, но попробуйте декомпилировать его, и вы поймете, что я имею в виду) – Almund

 Смежные вопросы

  • Нет связанных вопросов^_^