powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
4 сообщений из 4, страница 1 из 1
MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
    #37676087
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовал MVVM как тут http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages/
Ошибки валидации показываю как тут http://msdn.microsoft.com/en-us/library/ms752347.aspx#invalidation_feedback

Проблема в коде отображения ошибки:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>


Конкретно, в части
Код: xml
1.
Path=(Validation.Errors)[0].ErrorContent


Там в примере привязывается один элемент управления и, соответственно, к одному свойству одного объекта. А если у меня много таких свойств? У меня код выглядит так - привязка к свойствам ширины и высоты:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<TextBox 
	Name="widthTextBox" 
	Text="{Binding Path=width, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock 
	Name="widthErrorTextBlock" 
	Text="{Binding ElementName=widthTextBox, Path=(Validation.Errors)[0].ErrorContent}" />

<TextBox 
	Name="heightTextBox" 
	Text="{Binding Path=height, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock 
	Name="heightErrorTextBlock" 
	Text="{Binding ElementName=heightTextBox, Path=(Validation.Errors)[0].ErrorContent}" />


Текстбоксы для ввода значений, а текстблоки - для отображения ошибок. Если ошибки сразу у обоих свойств объекта, то в обоих текстовых блоках показывается ошибка только первого свойства, если у какого-то одного, то показывает ошибку именно этого свойства. Причём, если заменить путь привязки на (Validation.Errors).CurrentItem, то ничего не изменится.


Как сделать так, чтобы при любой конфигурации ошибок элемент отображения текста ошибки всегда показывал только свою ошибку?
...
Рейтинг: 0 / 0
MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
    #37676094
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточняю. Не "показывается ошибка только первого свойства", а на самом деле сценарий такой. Я запускаю приложение и по нажатию кнопки создаётся объект со свойствами, которые проходят валидацию модели представления и не проходят валидацию модели. На этом этапе ошибки отображаются для каждого свойства свои. Потом я исправляю второе свойство, чтобы оно проходило валидацию и модели, но отображение ошибки валидации модели не исчезает. Лишь когда я исправляю и первое свойство (для него отображение ошибки исчезает сразу), а затем ещё изменяю второе (чтобы возникло событие PropertyChanged), то тогда уже для второго исчезает отображение ошибки. Т. е. какая-то зависимость между первым и вторым свойством есть, причём первое почему-то влияет на второе.
...
Рейтинг: 0 / 0
MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
    #37676095
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё более обще заметил. Отображение ошибки валидации МОДЕЛИ (но не модели представления) для второго свойства появляется всегда, когда есть отображение ошибки валидации МОДЕЛИ для первого. Но при текст ошибки для каждого свойства свой - т. е. для свойства ширины пишет, что неправильная ширина, когда она на самом деле неправильная, но для высоты пишет, что неправильно ВЫСОТА, даже когда она правильна.
...
Рейтинг: 0 / 0
MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
    #37676098
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, разобрался! Это в модели опечатку сделал при проверке свойств и в результате в коде проверки высоты проверял всё равно ширину. ))

Это из-за того, что код переносил методом copy-paste и забыл все имена поправить. ))))
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM - Как показать ошибки валидации для нескольких свойств привязанного объекта?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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