下面是一个模板,从绑定的角度来看,但错误模板不显示,没有AdornedElementPlaceholder的结果看起来有点花哨。如何触发此错误模板?
我的视图模型实现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>
我分心了别的东西,所以很抱歉迟到的回应。我现在给你答案,但我不会有机会尝试,直到本周的某个时候(这意味着我可能有一个后续问题或额外的评论,但看起来目标。 – Berryl 2011-03-26 13:02:45