【问题标题】:Difference between Binding and x:BindBinding 和 x:Bind 之间的区别
【发布时间】:2016-09-20 18:00:02
【问题描述】:

在 UWP 中使用什么,Bindingx:Bind,它们之间有什么区别?

因为我看到很多帖子都使用Binding,而我只在UWP 中绑定x:Bind

在 MSDN 主页上只说“{x:Bind}{Binding} 创建的绑定对象在功能上基本上是等效的。” x:Bind 更快

但是它们之间有什么区别呢?

因为“在很大程度上功能等效”并不意味着等效。

我引用的链接:MSDN

所以我的问题是:

在 UWP 中使用 Binding 或 x:Bind 有什么区别?

【问题讨论】:

  • 可以说,最显着的区别是(如{x:Bind} markup extension 中所述):“编译的绑定是强类型的,将解析路径中每个步骤的类型。如果返回的类型没有成员,编译时会失败。"
  • 我想知道 x:Bind 比 Binding 快多少。我可以期望它快 1.5 倍、2 倍、10 倍等吗?由于这一切都发生在 XAML 中,我不知道有什么方法可以衡量它。

标签: xaml data-binding win-universal-app uwp


【解决方案1】:

以下可能不完整,但一些主要区别是

  • 旧式{Binding }

    • 绑定到 DataContext
    • 绑定到属性名称,灵活选择实际的源类型

  • 新风格{x:Bind }

    • 绑定到框架元素(代码隐藏类)
    • 需要在编译时修复所有类型
    • 默认为更节俭的 OneTime 模式

starting with build 14393{x:Bind } 支持:

  • 直接 BooleanToVisibility 绑定,没有 ValueConverter
  • 扩展的函数绑定
  • 铸造
  • 字典索引器

较新的 {x:Bind } 在运行时要快一些,但同样重要的是,它会为错误的绑定提供编译器错误。使用 {Binding } 在大多数情况下,您只会看到一个空的 Control。

深入比较结帐:{x:Bind} and {Binding} feature comparison

【讨论】:

  • 我会添加示例来解释每个语句的含义。在我的特殊情况下,{Binding Data.Name, Mode=OneWay} 不适用于更新(尽管 Data 和 Name 都在实现 INotifyPropertyChanged),但是 { x:Bind Data.Name, Mode=OneWay} 完成了这项工作。
【解决方案2】:

{x:Bind} 执行在编译时生成的专用代码。 {Binding} 使用通用运行时对象检查。因此,{x:Bind} 具有出色的性能并提供绑定表达式的编译时验证。它通过使您能够在作为页面的部分类生成的代码文件中设置断点来支持调试。

因为{x:Bind} 使用生成的代码来实现它的好处,它在编译时需要类型信息。这意味着您不能绑定到您提前不知道类型的属性。因此,您不能将 {x:Bind} 与 Object 类型的 DataContext 属性一起使用,并且在运行时也会发生更改。 {x:Bind} 标记扩展(Windows 10 的新功能)是{Binding} 的替代品。 {x:Bind} 缺少{Binding} 的一些功能,但它比{Binding} 运行的时间和内存更少,并且支持更好的调试。

【讨论】:

  • 你能添加你引用的来源吗?
  • @AxelMeier 答案引用了x:Bind markup extension 准确地说第一段来自本页简介第二段 来自此页面的 Remarks 部分
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
  • 2010-10-28
  • 2015-10-04
  • 2012-08-12
相关资源
最近更新 更多