| 
 | 
| 
 
Валидация во вложенной вьюмодели 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет! Имеем окно со своей вьюмоделью, в окне размещен Page со своей моделью. В основном окне можно нажать OK только если нет ошибок (string Error is empty). Как передать текст ошибки валидации из модели страницы в модель родительского окна? В конструкторе страницы передать ссылку на строку ошибки? Дёргать какое-то событие окна? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 08.05.2021, 07:19 | 
  
  
  
   | 
||
| 
 
Валидация во вложенной вьюмодели 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Евгений, Екатеринбург, реализация решения очень зависима от деталей созданной архитектуры. Приведу два основных (на мой взгляд вариантов): 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. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 09.05.2021, 11:23 | 
  
  
  
   | 
||
| 
 
Валидация во вложенной вьюмодели 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Eld Hasp, Спасибо! Я сделал универсальное окно с кнопками Ok и Cancel, и в это окон во фрейм подсовывается Page с нужными контролами редактирования сущности. В самой Page значения валидируются, но я хочу сделать чтобы если есть ошибки, то в окне кнопка Ok была недоступна. Т.е. в команде, к котрой биндится кнопка нужно проверять какое-то свойство (например, Error дочерней CVM). Но может я не там копаю. А чем UserControl лучше чем Frame? У меня WPF, .Net 4.6.1 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 11.05.2021, 13:09 | 
  
  
  
   | 
||
| 
 
Валидация во вложенной вьюмодели 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Евгений, Екатеринбург А чем UserControl лучше чем Frame? Не Frame, а Frame+Page. 1) UserControl применяется сам по себе. Не нужна связка из двух элементов. 2) Он наследует Контекст Данных от вышестоящего контейнера (чаще всего от Окна), что намного удобнее в контексте реализации MVVM. 3) По сути использование Frame+Page вне встроенной навигации - лишено смысла. И даже в случае использовании встроенной навигации реализация с использованием UserControl очень часто оказывается проще, прозрачнее, управлемее. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.05.2021, 14:37 | 
  
  
  
   | 
||
| 
 
Валидация во вложенной вьюмодели 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Евгений, Екатеринбург Я сделал универсальное окно с кнопками Ok и Cancel, и в это окон во фрейм подсовывается Page с нужными контролами редактирования сущности. В самой Page значения валидируются, но я хочу сделать чтобы если есть ошибки, то в окне кнопка Ok была недоступна. Т.е. в команде, к котрой биндится кнопка нужно проверять какое-то свойство (например, Error дочерней CVM). Если у вас команда кнопки ОК объявлена в ОСНОВНОЙ VM, то вы же без проблем можете в CanExecute проверять свойство дочерней VM. Что вам мешает? Для более конкретного ответа - нужно больше деталей вашей реализации: - коды основной и дочерней VM относящиеся к вопросу; - как создаются VM и как дочерняя внедряется в основную; - XAML компоновки в части Page и создания Контекста Данных Окна и Page. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 12.05.2021, 14:43 | 
  
  
  
   | 
||
| 
 | 

start [/forum/search_topic.php?author=DBMS_%2A&author_mode=last_topics&do_search=1]:  | 
    0ms | 
get settings:  | 
    11ms | 
get forum list:  | 
    15ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    87ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    49ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 438ms | 
| total: | 645ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...