Неверные данные в TextBox - Как отключить мои кнопки управления? - PullRequest
2 голосов
/ 13 июня 2011

В основном у меня следующая ситуация:

<TextBox Text="{Binding MyIntValue}" />
<Button prism:Click.Command={Binding MyCommand}" />
public Boolean CanDoCommand()
{
    return (MyIntValue < 100);
}

public void DoCommand() { ... }

Так вот в чем проблема, если я введу значение 25, MyCommand станет активным. Впоследствии, если я изменю его на 25A, кнопка все еще будет включена, поскольку привязка не была обновлена, чтобы отразить ошибку в моей модели представления. Вместо этого у меня только ошибка привязки в моем представлении. При этом кнопка MyCommand остается включенной, а значение MyIntValue остается равным 25.

Как отключить кнопку, если возникли какие-либо проблемы с привязкой, даже если мой ViewModel исправен?

Редактировать (Что действительно просит плакат):

Как отключить кнопку независимо что возвращает метод CanExecute из ViewModel, основанной на View с ошибкой BindingError?

Ответы [ 3 ]

0 голосов
/ 13 июня 2011

Вы должны поднять команду может выполнить измененное событие при изменении MyIntValue.

0 голосов
/ 13 июня 2011

если ваше свойство MyIntValue имеет тип int, то привязка никогда не будет обновляться, если введено значение 25 А.

Единственный способ решить эту проблему - использовать тип строки и IDataErrorInfo на стороне виртуальной машины.* Другой способ - использовать typeof Nullable int и конвертер и установить значение NULL, если оно не соответствует ожидаемому.

РЕДАКТИРОВАТЬ:

Как отключить кнопку на основевозникли какие-либо проблемы с привязкой, даже если мой ViewModel исправен?

Ваша проблема заключается в том, что ваша виртуальная машина и пользовательский интерфейс не синхронизированы.если вы наберете 25A, ваш Vm кажется правильным, потому что он все еще имеет 25, но у вашего View есть ошибка BindingError.поэтому ваш вопрос должен быть о том, как я могу синхронизировать свое представление и модель представления.(см. мои два предложения)

РЕДАКТИРОВАТЬ: другое решение будет предотвращать неправильный ввод.поэтому поведение Masked или RegexTextbox также должно работать.

0 голосов
/ 13 июня 2011
<Button prism:Click.Command={Binding MyCommand, 
    UpdateSourceTrigger=PropertyChanged}" /> 
...