WPF - Как заставить команду пересмотреть 'CanExecute' через его CommandBindings

Нет прямого способа предотвратить повышение событий для свойства text, однако ваш обработчик событий может использовать флаг для определения погоды или не выполнять задачу. Это я, вероятно, более эффективен, чем прикрепление и отключение обработчика событий. Это может быть сделано с помощью переменной внутри страницы или даже специализированного обертки класса

С переменной:

skipTextChange = true;
txt.Text = "Something";

protected void TextChangedHandler(object sender, EventArgs e) {
  if(skipTextChange){ return; }
  /// do some stuffl
}

С помощью специализированной обертки обработчика события

   var eventProxy = new ConditionalEventHandler<EventArgs>(TextBox1_TextChanged);
    TextBox1.TextChanged = eventProxy.EventAction;

    eventProxy.RaiseEvents = false;
    TextBox1.Text = "test";


    public void TextBox1_TextChanged(object sender, EventArgs e) {
       // some cool stuff;
    }

    internal class ConditionalEventHadler<TEventArgs> where TEventArgs : EventArgs
{
   private Action<object,TEventArgs> handler;

    public bool RaiseEvents {get; set;}

    public ConditionalEventHadler(Action<object, TEventArgs> handler)
    {
        this.handler = handler; 
    }

    public void EventHanlder(object sender, TEventArgs e) {
      if(!RaiseEvents) { return;}
      this.handler(sender, e);
    }
}
125
задан Dave Clemmer 8 May 2013 в 21:50
поделиться

1 ответ

Не самое красивое в книге, но вы можете использовать CommandManager, чтобы аннулировать все привязки команд:

CommandManager.InvalidateRequerySuggested();

См. Дополнительную информацию на MSDN

165
ответ дан 24 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: