我的内容控件有2个数据模板,如下所示;
<ContentControl Content="{Binding ContentViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:TypeA}">
<vs:TypeAView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:TypeB}">
<vs:TypeBView />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
我的问题是TypeA视图和TypeB视图都有一个绑定到Name属性的文本框。在我的包含控件上,当从树视图中选择一个项目时,将设置ContentViewModel属性。
数据显示,可以根据需要进行编辑。但是当我的TypeB视图的名称字段无效时我遇到了问题(我正在使用EntLib 5验证并实现了IDataErrorInfo - 所以我的绑定有ValidatesOnDataErrors = True)。虽然控件的错误模板按预期显示,但当我在树视图中单击TypeA时,即使TypeA的名称文本框有效,仍会显示错误消息。
就好像绑定混淆了哪个。奇怪的是它只发生一种方式,即从无效的TypeB名称转到TypeA视图。从无效的TypeA视图出发时似乎没有发生。
任何人都可以帮忙表明我做错了吗?
这是我用于文本框的错误模板;
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="true">
<Border DockPanel.Dock="Left" Margin="0,0,2,0" Width="14" Height="14" CornerRadius="10"
ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors), Converter={StaticResource ErrorContentConverter}}">
<Border.Background>
<RadialGradientBrush GradientOrigin="0.2,0.2" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<RadialGradientBrush.GradientStops>
<GradientStop Color="Pink" Offset="0" />
<GradientStop Color="Red" Offset="1" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</Border.Background>
<TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White" />
</Border>
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
<Border BorderBrush="Red" BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>