아래는 바인딩 관점에서 작동하는 템플릿이지만 오류 템플릿은 표시되지 않으며 AdornedElementPlaceholder가 없으면 결과가 약간 번쩍입니다.어떻게이 오류 템플릿을 트리거 할 수 있습니까?
내 뷰 모델은 IDataErrorInfo를 구현하고 일반적으로 내 바인딩의 일부로 ValidatesOnError = True를 사용하여 오류 템플릿을 트리거합니다. 이 특정 뷰 모델은 표시 전용이므로 IDataErrorInfo 인덱서는 호출되지 않습니다. IDataErrorInfo.Error뿐만 아니라 부울 IsValid 속성을 포함하여 유효성 검사와 관련된 많은 유용한 속성이 있습니다. 둘 다 적절하지 않은보기 모델에 적절하게 응답합니다.
오류를 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>
나는 뭔가 다른 것으로 정신이 생겼다. 그래서 늦은 응답에 대해 유감스럽게 생각한다. 당신에게 대답을 지금 내리고 있지만, 나는 이번 주 언젠가 그것을 시험해 볼 기회를 얻지 못할 것입니다. (나는 질문이나 추가 코멘트가있을 수 있습니다. – Berryl