Все элементы управления предлагают какое-либо событие, чтобы указать, что значение было изменено. Например, когда вы входите в текстовое поле и начинаете печатать с каждым нажатием клавиши, возникает событие TextChanged
. При открытии поля со списком и выборе нового элемента в раскрывающемся списке вы получаете событие SelectedIndexChanged
.
Проблема в том, что во многих случаях события изменения сигнализируют о серии изменений, представляющих некое промежуточное незавершенное состояние. например Когда пользователь вводит свой почтовый индекс, нет причин искать город и штат или даже пытаться проверить его, пока пользователь не завершит ввод. Когда пользователь фокусируется на комбинации способов доставки и нажимает клавиши вверх/вниз для навигации по значениям комбинации, пытаясь найти нужную ему комбинацию, нет причин предполагать, что метод доставки был указан, и, таким образом, применять его к выставленный счет. Возможно, имеет смысл подождать, пока он не покинет поле со списком после просмотра значений, чтобы сигнализировать о том, что выбран способ доставки. Мы не хотим, чтобы нас беспокоила череда промежуточных состояний.
В нашем магазине мы реализовали событие Finalized
, которое запускается только тогда, когда пользователь начинает вносить какие-либо изменения вручную (в отличие от программных изменений, таких как установка почтового индекса из БД), а затем завершает работу. Это событие Finalized
нужно было обрабатывать по-разному для разных элементов управления; Я не знаю каких-либо функций .NET, которые упростили бы это.
Единственная идея, которая у меня сейчас есть, это попытаться использовать что-то вроде Rx ( функциональное реактивное программирование), чтобы приспособиться к этому. Любая идея для простого подхода .NET, который облегчил бы это?