Обновлять свойство Button при изменении Text у TextBox

159
21 июля 2019, 01:50

В окне кнопка, у которой свойство IsEnabled должно быть true только если Text в TextBox соответствует паттерну Regex. А в других случаях false. Так же нужно соблюдать паттерн MVVM

View.xaml

<Button
    Content="CLICK!"
    Height="45"
    IsEnabled="{Binding NameIsValid, Mode=OneWay}"
    Width="127" />
<TextBox
    Height="32"
    Text="{Binding Name, Mode=OneWayToSource}"
    FontSize="20"
    Width="120"/>

ViewModel.cs

public bool NameIsValid
{
    get {
        return new Regex(@"^([A-Z]|[А-Я]|І|Ї)([a-z]|[а-я]|і|ї)+").IsMatch(Name);
    }
}
public string Name
{
    get => user.Name;
    set {
        user.Name = value;
        OnPropertyChanged("Name");
        OnPropertyChanged("NameIsValid");
    }
}

При вводе валидного значение в TextBox свойство IsEnabled у кнопки не обновляется, а остается таким какое было при запуске.

Как правильно обновлять свойство элемента при изменении другого в моем случае?

P.S.

Обнаружил, что обновление случается, только когда TextBox выходит из фокуса. А можно ли что бы сразу при наборе текста были видны обновления?

Answer 1

Проблема была в том, что привязка обновлялась при потере фокуса, что является поведением по умолчанию для текстбокса. Вам же нужно вот это

<TextBox Text="{Binding Name, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" />

Обновление привязки при изменении свойства Text текстбокса.

READ ALSO
Получения url страницы в ajax запросе

Получения url страницы в ajax запросе

Есть ajax запросРезультатом которого если всё хорошо будет срабатывать

168
Почему в проекте можно обратится к зависимостям подключенной dll?

Почему в проекте можно обратится к зависимостям подключенной dll?

Всем привет!Сразу извиняюсь, если очень глупо задал вопрос

140
GroupBy работает не корректно в IQueryable

GroupBy работает не корректно в IQueryable

Работаю с Entity FrameworkЕсть класс

138
Вызов алерта после редиректа

Вызов алерта после редиректа

У меня есть форма на которой выполняется ajax запрос, в итоге выполнения происходит перенаправление на другую страницу$(location)

229