Нет прямого способа предотвратить повышение событий для свойства 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);
}
}
Не самое красивое в книге, но вы можете использовать CommandManager, чтобы аннулировать все привязки команд:
CommandManager.InvalidateRequerySuggested();
См. Дополнительную информацию на MSDN