下面是一個模板,從綁定的角度來看,但錯誤模板不顯示,沒有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