我有ItemsControl
绑定到ObservableCollection
。这个集合有一个验证规则(使用IDataErrorInfo
),基本上说'如果这个列表中有'引用',那么也必须有一个'客户'。
我可以看到验证规则按预期工作,因为我有一个绑定到命令的按钮,如果有错误则无法执行。但是,ItemsControl
无法使用错误样式进行直观更新。
此错误样式确实有效。我在许多其他控件(主要是TextBox
和ComboBox
)上使用它,如果绑定集合设置为新集合,它会在ItemsControl
上显示。纯粹是添加和删除错误样式不会更新。
<ItemsControl Margin="5" ItemsSource="{e:Binding Path=CurrentBooking.Regardings}" Background="Transparent">
<!-- Items Panel and ItemTemplate Stuff -->
</ItemsControl>
e:Binding
是一个自定义Binding
,除其他外,它将3个ValidatesOn ...属性设置为true。 CurrentBooking.Regardings
是ObservableCollection
这是空的用户控件。加号图标用于向集合中添加项目。
这应该应用错误样式,因为有引号而没有客户。上面提到的按钮被禁用,表明存在错误。
如果我改为使用添加的项目创建一个新集合,它会应用该样式。但是,每次添加或删除项目时,我都不特别想要创建新的集合。
错误样式代码:
<Style x:Key="ErrorStyle" TargetType="FrameworkElement">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
<!--Clear Template if false-->
<Trigger Property="Validation.HasError" Value="false">
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ItemsControl" BasedOn="{StaticResource ErrorStyle}">
<Setter Property="Background" Value="Transparent"/>
</Style>