繁体   English   中英

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

[英]Prevent WPF Binding Exception: Cannot find source for binding with reference 'RelativeSource FindAncestor…' reduces performance

我写的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>

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

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

仅在为包含此ListBoxItemListBox应用分组时才相关...

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM