Почему привязка данных в этом примере проверки работает? - PullRequest
0 голосов
/ 29 марта 2010

Мне интересно, как именно работает образец XAML ( образец MSDN ):

<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>

Вопросы:

  • (Validation.Errors) [0] .ErrorContent - WPF проверяет каким-либо образом этот код? Поскольку Validation.Errors может быть пустой коллекцией, и в обычном коде C # этот код может вызвать исключение. Если эта привязка данных возвращает значение NULL для правильного ввода - значение NULL затем преобразуется в пустую строку (например, в текстовом элементе управления)?
  • Индекс 0 соответствует первому сообщению об ошибке. Как я могу вернуть больше сообщений об ошибках из метода Validate?

Спасибо за ответы!

1 Ответ

1 голос
/ 29 марта 2010

В этом случае ваша привязка активна только в том случае, если Validation.HasError истинно (на основе триггера). Из-за этого в вашей коллекции всегда будет хотя бы одна ошибка.

Если вы хотите отобразить больше, чем первая ошибка, вы можете вместо этого поместить в подсказку элемент управления, который позволяет вам связывать всю коллекцию, такую ​​как ListView. Это позволит вам иметь ListSource ItemsSource, привязанный к коллекции Validation.Errors, вместо того, чтобы пытаться получить доступ только к первому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...