Binding 和 x:Bind 之间的区别
Posted
技术标签:
【中文标题】Binding 和 x:Bind 之间的区别【英文标题】:Difference between Binding and x:Bind 【发布时间】:2016-09-20 18:00:02 【问题描述】:在 UWP 中使用什么,Binding
或 x: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 中,我不知道有什么方法可以衡量它。 【参考方案1】:以下可能不完整,但一些主要区别是
旧式Binding
新风格x:Bind
而starting with build 14393、x:Bind
支持:
较新的 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 部分以上是关于Binding 和 x:Bind 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令
MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令