在我的WPF应用程序中,我有一个ListBox绑定到一组视图模型 . 这些视图模型支持实现INotifyDataErrorInfo的验证 . 我正在尝试在ListBox中显示包含验证错误的项目的错误模板 .
通过在ListBox的ItemSource绑定上设置NotifyOnValidationError = True,我可以让ListBox显示默认的错误模板 .
看起来像这样:
我的ListBox代码:
<ListBox x:Name="ListBoxEvents" ItemsSource="{Binding Events, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}"
IsSynchronizedWithCurrentItem="True" ItemTemplate="{DynamicResource EventListTemplate}"></ListBox>
我的ListBox样式:
<ControlTemplate x:Key="ListBoxValidationError">
<DockPanel LastChildFill="True">
<Border Background="Red" Margin="5">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
<Style TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="{StaticResource WindowTitleBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="MinWidth" Value="200" />
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="ScrollViewer.CanContentScroll" Value="False"></Setter>
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ListBoxValidationError}"></Setter>
</Style>
ListBox项目模板:
<DataTemplate x:Key="EventListTemplate" DataType="{x:Type event:EventViewModel}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Title, Converter={StaticResource EmptyStringConverter}, ConverterParameter='-'}" FontWeight="Bold" FontSize="14" />
<TextBlock Text="{Binding Date, StringFormat={}{0:dd.MM.yyyy}}" Grid.Row="1" Grid.Column="0" FontStyle="Italic" />
<Button Grid.Column="1" Grid.RowSpan="2" Grid.Row="0" Style="{DynamicResource ItemDeleteButton}" />
</Grid>
</DataTemplate>
如何为ListBoxItems显示自定义错误模板? (我的目标是让项目的背景变红)
1 回答
你也可以在
ItemContainerStyle
中的ListBoxItem上指定Valdiation.ErrorTemplate
:当item中的任何属性抛出错误时,您很可能希望在ListBoxItem上显示它 . ListBoxItem数据中的Name属性无效,它绑定到TextBox . 在文本框上将
ValidatesOnDataErrors
设置为true,并将Validation.ValidationAdornerSite
设置为父ListBoxItem .样品: