powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Валидация во вложенной вьюмодели
5 сообщений из 5, страница 1 из 1
Валидация во вложенной вьюмодели
    #40069060
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Имеем окно со своей вьюмоделью, в окне размещен Page со своей моделью. В основном окне можно нажать OK только если нет ошибок (string Error is empty). Как передать текст ошибки валидации из модели страницы в модель родительского окна?
В конструкторе страницы передать ссылку на строку ошибки? Дёргать какое-то событие окна?
...
Рейтинг: 0 / 0
Валидация во вложенной вьюмодели
    #40069079
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений, Екатеринбург, реализация решения очень зависима от деталей созданной архитектуры.
Приведу два основных (на мой взгляд вариантов):

1) VM страницы является вложенной (дочерней - CVM) по отношению к основной VM (MVM) Окна.
В этом случае можно внедрить в CVM некий объест свойства которого будет менять CVM
Но ссылка на объект останется и МVM - поэтому MVM без проблем сможет сама валидировать этот объект.

Если передавать надо только одно значение, то можно в CVM просто добавить одно-два свойства нужного типа.
Возможно они уже и так есть, так как вы же в странице к чему-то привязываетесь.
И MVM по событию PropertyChanged из CVM будет валидировать это свойство.

2) VM страницы и VM Окна независимы, то есть это одноранговые объекты "не знающие" друг о друге.
В этом случае очевидно нужно как-то передать (привязать) значения UI элемента страницы к VM Окна.
На мой взгляд это проще решить установкой прокси в ресурсах Окна получающего VM Окна.
Тогда в странице будет возможно задать привязку к этому прокси.
Но это решение критично к компоновке.
Не в каждой компоновке ресурсы Окна будут видны в странице.


P.S. Уточняющие вопросы:
1) У вас WPF (Core или FW) или UWP?
2) Почему Страница, а не UserControl? В большинстве случаев использование Frame+Page неоправданно и их лучше заменить на UserControl.
...
Рейтинг: 0 / 0
Валидация во вложенной вьюмодели
    #40069328
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld Hasp,
Спасибо!
Я сделал универсальное окно с кнопками Ok и Cancel, и в это окон во фрейм подсовывается Page с нужными контролами редактирования сущности. В самой Page значения валидируются, но я хочу сделать чтобы если есть ошибки, то в окне кнопка Ok была недоступна. Т.е. в команде, к котрой биндится кнопка нужно проверять какое-то свойство (например, Error дочерней CVM).
Но может я не там копаю.
А чем UserControl лучше чем Frame?
У меня WPF, .Net 4.6.1
...
Рейтинг: 0 / 0
Валидация во вложенной вьюмодели
    #40069626
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений, Екатеринбург
А чем UserControl лучше чем Frame?

Не Frame, а Frame+Page.
1) UserControl применяется сам по себе. Не нужна связка из двух элементов.
2) Он наследует Контекст Данных от вышестоящего контейнера (чаще всего от Окна), что намного удобнее в контексте реализации MVVM.
3) По сути использование Frame+Page вне встроенной навигации - лишено смысла. И даже в случае использовании встроенной навигации реализация с использованием UserControl очень часто оказывается проще, прозрачнее, управлемее.
...
Рейтинг: 0 / 0
Валидация во вложенной вьюмодели
    #40069631
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений, Екатеринбург

Я сделал универсальное окно с кнопками Ok и Cancel, и в это окон во фрейм подсовывается Page с нужными контролами редактирования сущности. В самой Page значения валидируются, но я хочу сделать чтобы если есть ошибки, то в окне кнопка Ok была недоступна. Т.е. в команде, к котрой биндится кнопка нужно проверять какое-то свойство (например, Error дочерней CVM).


Если у вас команда кнопки ОК объявлена в ОСНОВНОЙ VM, то вы же без проблем можете в CanExecute проверять свойство дочерней VM.
Что вам мешает?

Для более конкретного ответа - нужно больше деталей вашей реализации:
- коды основной и дочерней VM относящиеся к вопросу;
- как создаются VM и как дочерняя внедряется в основную;
- XAML компоновки в части Page и создания Контекста Данных Окна и Page.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Валидация во вложенной вьюмодели
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]