【问题标题】:WPF - Does binding object created on demand (in trigger conditions) or on element loading?WPF - 绑定对象是按需创建的(在触发条件下)还是在元素加载时创建?
【发布时间】:2018-07-18 03:59:40
【问题描述】:

我得到了下面的代码,我想知道第二个绑定(trigger 的第二个条件)是否在加载TreeViewItem 时创建了它的绑定对象?还是仅当第一个 condition 为 True 时?

<Style TargetType="TreeViewItem">
           <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}"
                                   Value="True"/>
                        <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=TreeView}, Path=DataContext.IsConfigurationAttributeEnabled}"
                                   Value="True"/>
                    </MultiDataTrigger.Conditions>
                   <Setter Property="Foreground"
                           Value="Aqua"/>
               </MultiDataTrigger>
           </Style.Triggers>
       </Style>

假设我们有一个DataGrid,每个单元格有5 个MultiDataTriggers,每个单元格有4 个条件。大多数多数据触发器将在第一个条件下失败(绑定到 Mode=OneTime 的某些系统属性)。在这种情况下,我认为每个单元格徒劳地创建这么多绑定对象有点沉重。或者也许它不是那么重要,因为我们有虚拟化和分页?

【问题讨论】:

  • 这应该回答你的问题:stackoverflow.com/a/19889144/109702
  • 不。我已经询问 WPF 是否正在创建第二个和第三个条件(不是触发器)的绑定对象,即使第一个条件失败并且它们从未达到。换句话说,条件的所有绑定对象是在窗口加载时创建的,还是仅在满足先前条件的情况下创建。记忆方面让我感兴趣。

标签: wpf data-binding


【解决方案1】:

我得到了下面的代码,我想知道第二个绑定(触发器的第二个条件)是否在加载TreeViewItem 时创建了它的绑定对象?

是的。只要将Style 应用于TreeViewItem,就会创建绑定。

或仅当第一个条件为真时?

没有。

在这种情况下,我认为每个单元格徒劳地创建这么多绑定对象有点沉重。

好吧,不管重不重,这就是它的作用。不过,这应该不是一般问题。 Binding 对象非常小,垃圾收集器最终会收集您的应用程序不再使用的任何对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多