【问题标题】:If a XAML element's Visibility is set to Invisible, does its property bindings continue to be updated?如果 XAML 元素的可见性设置为不可见,它的属性绑定是否会继续更新?
【发布时间】:2018-07-30 03:13:00
【问题描述】:

例如,如果我有一个 TextBlock,其 Text 属性绑定到我的 ViewModel 中的某个字符串,如果 TextBlock 的 Visibility 设置为 Invisible,该绑定是否会继续侦听 ViewModel 字符串的更改?

【问题讨论】:

    标签: .net xaml data-binding uwp c#-2.0


    【解决方案1】:

    是的,它会继续监听变化!

    绑定机制涉及在依赖对象中定义的 CLR 类型(源)和依赖属性(目标),并且不受当前定义其某些属性的方式的限制,除非明确定义了相关性。

    构成Binding 进程的原因是我们为CLR 对象提供了实现,以将其更改传达给我们的视图 中定义的对象,而且我们还提供了以下事实:让我们的依赖对象属性查找此通知。这是一种独立于目标对象的Visibility 的机制。

    否则想象一下我们使用来自某个ViewModel 的布尔属性来控制视图中控件的Visibility 的情况。使用最新的 SKD 版本时,系统会在您使用 x:Bind 时自动为您处理此问题,但假设您正在使用 {Binding } 标记来定义您的绑定。

    你必须做什么?定义一个Converter 以将布尔值转换为Visibility 枚举和相反的值。

    • 现在假设我们首先将 ViewModel 布尔标志设置为 false,这将映射到 Collapsed。如果您将 boolean 属性更改为 true 并将该通知传播到目标控件,现在会发生什么?

    由于您的控件被设置为将其Vibility 设置为Collapsed,它将停止侦听 boolean 属性,并且无法实际拥有control Visibility 设置为 Visible,除非我们强制这样做,即使我们已将 boolean 标志更改为 true 并传播通知。

    将您的元素设置为 Collapsed 仅意味着在布局上没有为其保留空间,因此不会显示。 但是构成下面元素的内容可以并且仍然会根据请求进行多次更新。

    【讨论】:

    • 解释得很好。谢谢。
    猜你喜欢
    • 2010-09-27
    • 2016-06-28
    • 2014-08-20
    • 1970-01-01
    • 2016-01-31
    • 2021-11-15
    • 2012-05-15
    • 2015-08-23
    • 1970-01-01
    相关资源
    最近更新 更多