У меня есть ItemsControl (скажем, ListBox), и у меня есть DataTemplate
для содержимого.Когда я нажимаю кнопку, я хочу, чтобы все ListBoxItems были проверены.Это работает.
Тем не менее, хотя все элементы правильно проверены, и я могу получить для них сообщения об ошибках, WPF показывает только ValidationError.Template
для SelectedItem
рассматриваемого ListBox
.Он не отображает ValidationError.Template
для других элементов, которые не прошли проверку.Я обновляю источник привязки для каждого элемента, и для свойства Validation.HasError для них установлено значение true!Отсутствуют только визуальные эффекты, стиль не применяется!
У кого-нибудь есть решение проблемы?
Пример
Стиль TextBox:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<AdornedElementPlaceholder Name="MyAdorner" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="{DynamicResource TextBoxBackgroundBrush}" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="true">
<Setter Property="Background" Value="{DynamicResource TextBoxFocusBackgroundBrush}" />
</Trigger>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Background" Value="{DynamicResource ErrorBrush}" />
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Шаблон данных для объекта Person:
<DataTemplate DataType="{x:Type entities:Person}" x:Key="PersonItemStyle">
<Grid>
<TextBox x:Name="SomeTextBox">
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validators:RequiredFieldValidationRule ErrorMessage="Please enter a name!" />
</Binding.ValidationRules/>
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
</DataTemplate>
Где-то в каком-то элементе управления:
<ListBox Grid.Row="1" x:Name="ListBoxPersons" Style="{DynamicResource ListBoxStyle}" ItemsSource="{Binding Path=Persons}"
ItemContainerStyle="{StaticResource PersonItemStyle}">
</ListBox>
Затем попробуйте изменить несколько человек, например, setих имена, чтобы обнулить или использовать любую ошибочную привязку.При проверке триггеры для Validation.HasError
будут установлены только для выбранного элемента.
Как можно обойти эту проблему?