|
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
|
|||||||||||||||||||||||||||||||
Включить кнопку, когда 3 TextBox заполнены30.11.2019, 21:51. Показов 2349. Ответов 7
Метки нет (Все метки)
Нашел 1 пример вроде бы короткий, но не могу разобраться.
Пример: Кликните здесь для просмотра всего текста
Пример с использованием атрибутов и рефлексии. Есть базовый класс для VM: Кликните здесь для просмотра всего текста
наследуем от него класс поддерживающий валидацию: Кликните здесь для просмотра всего текста
Здесь в методе Set если произошло обновление свойства, то для текущего типа VM берем все свойства помеченные атрибутом и проверяем чтобы они были не пусты. Я использовал атрибут Required из пространства имен System.ComponentModel.DataAnnotations, если вам это не подходит - вы можете создать свой атрибут. Пример использования, VM: Кликните здесь для просмотра всего текста
Обратите внимание, атрибутом помечены только 2 свойства, именно они и будут проверяться на непустоту. Разметка:
Вопросы: 1)"Есть базовый класс для VM:" Его нужно отдельно прописать или можно содержимое вписать в свой MainWindowViewModel? 2)Зачем это функция нужна, в чем его смысл?: Кликните здесь для просмотра всего текста
[CallerMemberName] что это и для чего нужен? 3)В переопределенном методе Set: Кликните здесь для просмотра всего текста
Что значат эти записи подробно? 4)"Обратите внимание, атрибутом помечены только 2 свойства, именно они и будут проверяться на непустоту." Где эти 2 свойства? Добавлено через 58 минут Если Вам тоже сложно разобраться, можете предложить своё решение, которое соответствует архитектуре mvvm
0
|
|||||||||||||||||||||||||||||||
| 30.11.2019, 21:51 | |
|
Ответы с готовыми решениями:
7
Включить кнопку когда введен текст в два textbox Накапливать в textbox текст, когда нажимаешь кнопку
|
|
Модератор
|
|||||||
| 01.12.2019, 06:22 | |||||||
Советую воспользоваться реализацией из поста Новая реализация OnPropertyChangedClass. Тогда объявление свойств в VM предельно упростится
0
|
|||||||
|
Модератор
|
|||||||
| 01.12.2019, 06:30 | |||||||
И вызывает INPC только в случае их различий. Это предотвращает излишние обновления Представления. Для маленьких приложений это может быть не существо. В больших имеет значение. Лучше всегда делать так, что привыкнуть к правильной реализации. В моём варианте это исполняет код методов
0
|
|||||||
|
Модератор
|
||
| 01.12.2019, 06:39 | ||
Если все, то IsValid = true. На мой взгляд через чур надуманно и практического смысла не имеет. Такая логика даже не могу представить где может понадобиться. Для валидации значений в Представление лучше использовать имеющийся механизм валидации. В разделе есть несколько тем с его использованием. Или в край, если нет желания вникать, делается уже в VM облачным образом и только для тех свойств чьи значения надо проверить, а не для всех строковых скопом.
0
|
||
|
Модератор
|
||
| 01.12.2019, 06:45 | ||
Проверяются все свойства с указанными атрибутом. Эти два свойства в Пример использования, VM:Свойство Phone не будет проверяться. Также не получится проверка не строковых свойств.
0
|
||
|
Модератор
|
|||||||
| 01.12.2019, 07:18 | |||||||
Так как сейчас в длительной поездке и до НГ без компа. Но попробую объяснить со смарта.
0
|
|||||||
|
172 / 118 / 57
Регистрация: 08.01.2013
Сообщений: 664
|
|
| 20.12.2019, 01:30 [ТС] | |
|
Элд Хасп, IsValid как связан с PropertyNewValue?
0
|
|
|
Модератор
|
|
| 20.12.2019, 07:25 | |
|
bloomder, посмотрите реализацию OnPropertyChangedClass.
В базовом абсрактном классе классе OnPropertyChanged для присвоения значения свойству используется виртуальный метод SetProperty в который параметрами передаётся ссылка на поле хранящее значение свойства, новое значение свойства и имя свойства. В методе проверяется эквивалентность текущего и нового значения. Если значение изменяется, то вызывается виртуальный метод PropertyNewValue с теми же параметрами. В данном случае в переопределенном методе после присвоения значения проверяется какому из свойств было присвоено новее значении. Если одному из string []{nameof(Age), nameof(Name), nameof(Birthday)}, то выдаётся оповещение о необходимости перепроверки значения свойства nameof(IsValid).Добавлено через 19 минут bloomder, для меня такая валидации в ViewModel гораздо понятнее, прозрачнее, гибче, чем использование атрибутов свойств. Можно для валидации использовать любую функцию, любые типы.
0
|
|
| 20.12.2019, 07:25 | |
|
Помогаю со студенческими работами здесь
8
Разрешить нажатие кнопки только когда заполнены все поля
Проверка что все textbox-ы заполнены Как разблокировать кнопку, если все текстбоксы заполнены? Выполнений функций в зависимости от того, заполнены ли textbox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|