Валидаций двух и более обьектов в WPF (Validation WPF)

124
31 октября 2021, 15:10

У меня в диалогом окне есть 5 элементов xaml texbox у каждый элемент имеет свою валидацию

            <xctk:WatermarkTextBox Watermark="{Binding FirstNameBtnText}"
                               x:Name="FirstNameTextBox"
                               Text="{Binding Path=FirstNameProp,
                                        Mode=TwoWay,
                                        UpdateSourceTrigger=PropertyChanged,
                                        ValidatesOnDataErrors=True}"
                               />
   <xctk:WatermarkTextBox Watermark="{Binding SecondNameBtnText}"
                               x:Name="SecondNameTextBox"
                               Text="{Binding Path=LastNameProp,
                                        Mode=TwoWay,
                                        UpdateSourceTrigger=PropertyChanged, 
                                        ValidatesOnDataErrors=True}"/>
        <xctk:WatermarkTextBox Watermark="{Binding AdressBtnText}"
                               x:Name="AdressTextBox"
                               Text="{Binding Path=AdressProp,
                                        Mode=TwoWay,ValidatesOnDataErrors=True,
                                        UpdateSourceTrigger=PropertyChanged}"/>

В code behaind реализован интерфейс IDataErrorInfo

   public string this[string columnName]
    {
        get
        {
            switch (columnName)
            {
                case nameof(FirstNameProp):
                {
                    return UiString.ControlString(FirstNameProp);
                }
                case nameof(LastNameProp):
                {
                    return UiString.ControlString(LastNameProp);
                }
            return null;
        }
    }

Я не понимаю как правильно выстроить валидацию, чтобы кнопка сохранить изменения была активна только при том условии что все texbox проходят валидацию. Я понимаю что это нужно делать через команду, но вот как связать ошибки всех полей не понятно.

Answer 1

Как вариант, в модель данных добавить свойство bool AllFieldsIsValid (ну или что-нибудь в этом роде), и привязать его к свойству IsEnabled кнопки "сохранить", при реализации интерфейса IDataErrorInfo определить значение для AllFieldsIsValid.

PS. костыль конечно, но должно работать)

READ ALSO
Почему не работает код в VS

Почему не работает код в VS

Компилирую его стандартным компилятором NET который поставляется с фреймворкрм и все работает,раздел создается,а если компилировать из под...

214
Как разбить одномерный массив вида слово-перевод в двумерный? С#

Как разбить одномерный массив вида слово-перевод в двумерный? С#

Есть файл, в котором лежат строки вида "слово-перевод"Разделителем в данном случае работает "-"

202
Проблема с записью в текстовый файл из DataGridView

Проблема с записью в текстовый файл из DataGridView

Собственно, записывает в файл всё, кроме последней записи в строке DataGridView (получается 5, а должно быть 6)

204
cannot implicitly convert type int to bool

cannot implicitly convert type int to bool

Собственно, скопировал код на C из википедии, пишу на C#Ошибку выдаёт вот в таких моментах if (~u & 1) Не могу понять как исправить ситуацию, прошу...

185