如果 XAML 元素的可见性设置为不可见,其 属性 绑定是否会继续更新?

If a XAML element's Visibility is set to Invisible, does its property bindings continue to be updated?

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

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

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

构成 Binding 过程的事实是,我们为 CLR 对象提供实现,以将其更改传达给我们的 View[=48] 中定义的对象=],还有我们的依赖对象属性正在查找此通知的事实。这是一种独立于目标对象的 Visibility 的机制。

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

你要做什么?定义一个 Converter 以将 bool 值转换为 Visibility 枚举和逆。

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

由于您的控件设置为 VibilityCollapsed,它将停止收听 boolean 属性,并且实际上没有办法将控件 Visibility 设置为 Visible,除非我们强制这样做,即使我们已经更改了 ]boolean 标志为 true 并传播通知。

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