2015-05-23 6 views
1

У меня есть кнопка, которая включена/отключена на основе свойства validation.hasError из нескольких текстовых полей, и она отлично работает, пока я не хочу отключить и включить эту же кнопку из кода позади какой-то бизнес-логики. например.MultiDataTrigger Не запускается, как только свойство isEnabled изменяется от кода позади

if(recordExist) { btn.IsEnabled=true;} else{ btn.isenabled=false;}

теперь, что происходит, что когда-то else логика выполняется и кнопка отключена, кнопка повторно не включается снова, даже если validation.HasError всех элементов управления возвращают ложь. и как мудрый, если выполняется логика if и кнопка включена, она остается включенной, даже если validation.hasError возвращает true. я хочу, чтобы как-то перезапустить multiDataTriggers, чтобы проверить Validation.hasError на textboxes и обновить свойство кнопки isEnabled кнопки соответственно. Надеюсь, я достаточно ясен.

ответ

1

См. Dependency Property Value Precedence на MSDN.

Как только вы установите локальное значение, триггеры не смогут его переопределить. Вам нужно настроить привязки, триггеры и т. Д., Чтобы учитывать логику в коде. Если вы используете MVVM (и вы должны), вы можете добавить условие к своей модели представления.

В качестве альтернативы, если вы хотите, чтобы элемент управления забыл о локальном значении и дал триггер приоритет, вы можете использовать ClearValue. Или вы можете использовать SetCurrentValue и не давать приоритет новому значению. Однако вам следует избегать использования этих функций, они сделают ваш код более сложным для понимания и поддержки.

+0

Я думаю, было бы полезно добавить, что можно фактически установить значение свойства зависимостей и поддерживать его текущий источник данных (привязка и т. Д.) - с помощью метода SetCurrentValue. В случае OP, которое может быть достигнуто вызовом 'btn.SetCurrentValue (Button.IsEnabledProperty, true/* или false * /)'. – Grx70

+0

@ Grx70 Вы правы. Обновлен мой ответ. Тем не менее, я думаю, что 'ClearValue',' SetCurrentValue' и т. Д. Никогда не должны использоваться для обработки такой логики. Это похоже на хак. Для этих функций хорошо использовать, но это не так. – Athari

+0

Спасибо за ответчиков, но, как я упоминал выше, я использую 'style.triggers' и' MultiDataTrigger' для обработки включения и отключения кнопки, а свойство Isenabled не установлено внутри тега кнопки в xaml. и я попробовал 'setCurrentValue', он вообще не работает и не меняет свойство. и я не совсем понял вариант «ClearValue», вы можете привести пример. –

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

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