防止WPF绑定异常:找不到与引用'RelativeSource FindAncestor .....绑定的源'会降低性能

时间:2017-12-13 09:48:22

标签: wpf xaml data-binding

我写了Style

<Style x:Key="ProductItemContainerStyle"
           TargetType="{x:Type ListBoxItem}"
           BasedOn="{StaticResource ProductItemContainerBaseStyle}">
        <Setter Property="IsSelected"
                Value="{Binding Path=IsExpanded, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Expander}}, Mode=OneWayToSource}" />
    </Style>

仅在为保留此ListBox的{​​{1}}应用分组时才有意义。但是,大多数情况下它不在分组中,这导致数十,数百和数千个绑定异常(取决于列表中有多少项)。绑定异常是性能问题的已知原因。当后面的代码选择ListBoxItem并且Expander更改为true时,此绑定应扩展ListBoxItem。如您所见,绑定为IsSelected

有没有办法防止这些绑定异常?

1 个答案:

答案 0 :(得分:2)

  

仅在为ListBox ListBoxItem IsSelected申请分组时才有意义。

然后才应用它,即在您确实分组时使用不同的样式,或者在触发器中设置Setter属性,以确定您当前是否处于“分组”阶段。

如果您将Style硬编码为默认log4j.properties,那么XAML处理器当然会尝试解析绑定。告诉它不要的唯一方法是从XAML中删除绑定。

  

有没有办法防止这些绑定异常?

执行此操作的唯一方法是删除失败的绑定。您可以在工具 - &gt;选项 - &gt; WPF跟踪设置 - &gt;数据绑定下关闭跟踪,但这不会阻止在XAML处理器尝试解析绑定时实际抛出的操作。