Ниже приведен шаблон, который работает с точки зрения привязки, но шаблон ошибки не отображается, и без держателя AdornedElementPlace результат выглядит немного броским.
В моих моделях представления реализован IDataErrorInfo, и обычно я запускаю шаблон ошибки, имея ValidatesOnError = True как часть моей привязки. Эта конкретная модель представления только для отображения, поэтому индексатор IDataErrorInfo никогда не вызывается. У меня есть ряд полезных свойств, связанных с проверкой, в том числе логическое свойство IsValid, а также IDataErrorInfo.Error, оба из которых правильно реагируют на недопустимую модель представления.
Должен ли я перевести ошибку в ValidationResult и вызвать ее таким образом? Или есть что-то попроще?
Приветствия
Berryl
текущий шаблон
<!-- FooterViewModel DataTemplate -->
<DataTemplate DataType="{x:Type model:FooterViewModel}">
<Label x:Name="lblTotalTime"
Style="{StaticResource FooterStyle}"
Content="{Binding TotalTime, Converter={StaticResource TotalAmountConv}}" >
<Label.ToolTip>
<TextBlock Text="{Binding FeedbackMessage}" ></TextBlock>
</Label.ToolTip>
<Validation.ErrorTemplate>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Text=" *"
Foreground="Red"
FontWeight="Bold" FontSize="16"
/>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="placeholder"></AdornedElementPlaceholder>
</Border>
</DockPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</Label>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter TargetName="lblTotalTime" Property="Control.BorderBrush" Value="Red"/>
<Setter TargetName="lblTotalTime" Property="Control.BorderThickness" Value="1"/>
<Setter TargetName="lblTotalTime" Property="Control.Background" Value="LightYellow"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
UPDATE
Хорошо, я получаю IDataErrorInfo, чтобы включить его, просто изменив привязку для включения ValidatesOnErrors, НО шаблон ошибки все еще не отображается.
Вот привязка
<ItemsControl
ItemsSource="{Binding Path=FooterViewModels, Mode=OneWay, ValidatesOnDataErrors=True}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>