添加/删除项目时,ItemsControl验证样式不会更新

时间:2016-06-22 10:58:20

标签: c# wpf observablecollection itemscontrol idataerrorinfo

我有ItemsControl绑定到ObservableCollection。这个集合有一个验证规则(使用IDataErrorInfo),基本上说'如果这个列表中有'引用',那么也必须有一个'客户'。

我可以看到验证规则按预期工作,因为我有一个绑定到命令的按钮,如果有错误则无法执行。但是,ItemsControl无法使用错误样式进行直观更新。

此错误样式确实有效。我在许多其他控件(主要是TextBoxComboBox)上使用它,如果绑定集合设置为新集合,它会在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.RegardingsObservableCollection

这是空的用户控件。加号图标用于向集合中添加项目。

Initial state of the ItemsControl

这应该应用错误样式,因为有引号而没有客户。上面提到的按钮被禁用,表明存在错误。 ItemsControl with Quote

如果我改为使用添加的项目创建一个新集合,它会应用该样式。但是,每次添加或删除项目时,我都不特别想要创建新的集合。 ItemsControl With working error template

错误样式代码:

<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>

0 个答案:

没有答案