#c# #wpf #events
#c# #wpf #Мероприятия
Вопрос:
Я использую C #, .NET 3.1. В моем приложении у меня есть элемент управления IntegerUpDown, свойство value которого привязано к свойству в коде UCs. Если это свойство достигает 0, я хочу вызвать событие. Моя текущая реализация выглядит так:
private int prop;
public int Prop
{
get
{
return prop;
}
set
{
prop = value;
if (prop == 0)
{
// invoke event
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда пользователь нажимает на стрелки элемента управления IntegerUpDown, мой код проверяет, равно ли значение 0. Мой вопрос в том, есть ли способ вызвать событие «разумно». Под этим я подразумеваю, что событие будет, например, вызываться только в том случае, если пользователь не нажимал стрелку в течение последних 2 секунд, чтобы указать, что он закончил настройку значения.
Мне также интересно, стоит ли мне вообще беспокоиться об этом, поскольку я не знаю, насколько сильно программа будет на самом деле замедляться из-за такой вещи. Если у кого-то есть какие-либо данные по этому поводу, я также был бы очень признателен.
Комментарии:
1. Определите свою привязку как
{Binding Prop, Delay=2000}
.2. Терминология, которую вы ищете, называется Debouncing
3. Я не знаю wpf, поэтому, возможно, добавление задержки полезно (хотя 2 секунды могут быть долгим ожиданием ответа пользовательского интерфейса). Является ли код, который проверяет
0
, действительно ли значение вызывает проблему? Это относительно быстрая операция, которая обычно не вызывает проблем.4. Возможно, что выполнение присваивания и сравнение результата в
if
условии может быть немного быстрее (т. Е.:if ((prop = value) == 0)
), Но я не на компьютере, где я могу сравнить сгенерированный IL прямо сейчас.5. Вы действительно видите какую-то проблему? Если нет, то я бы предположил, что вы преждевременно оптимизируете против чего-то, чего там нет. Я не уверен, что это опровержение, которое вы описываете. Если пользователь уменьшает значение до 1. Останавливается на 1 или 2 секунды. Затем они нажали на ошибку down. Вы действительно не хотите запускать событие?