Xaml 绑定和x:Bind之间的区别

Xaml 绑定和x:Bind之间的区别,xaml,data-binding,win-universal-app,uwp,Xaml,Data Binding,Win Universal App,Uwp,在UWP中使用什么,绑定或x:Bind以及它们之间的区别是什么 因为我看到很多帖子,人们使用Binding,而我只在UWP中使用x:Bind进行绑定 在MSDN主页上,它只说“由{x:Bind}和{binding}创建的绑定对象在功能上基本上是等效的。”并且x:Bind更快 但是它们之间有什么区别呢? 因为“在很大程度上功能等同”并不意味着等同 我引用的链接: 所以我的问题是: 在UWP中使用Binding或x:Bind有什么区别?以下内容可能不完整,但一些主要区别是 旧式{Binding}

在UWP中使用什么,
绑定
x:Bind
以及它们之间的区别是什么

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

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

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

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

我引用的链接:

所以我的问题是:


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

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

  • 旧式
    {Binding}

    • 绑定到DataContext
    • 绑定到一个属性名,可根据实际源类型灵活设置

  • 新样式
    {x:Bind}

    • 绑定到框架元素(代码隐藏类)
    • 需要在编译时修复所有类型
    • 默认为更节省的一次性模式
而且,
{x:Bind}
支持:

  • 直接布尔可见性绑定,不带ValueConverter
  • 扩展函数绑定
  • 铸造
  • 字典索引器
较新的{x:Bind}在运行时稍微快一点,但同样重要的是,它将为错误的绑定提供编译器错误。使用{Binding}在大多数情况下,您只会看到一个空控件


对于深入的比较签出:

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

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

可以说,最显著的区别是(如中所述):编译的绑定是强类型的,将解析路径中每个步骤的类型。如果返回的类型没有成员,它将在编译时失败。“我想知道x:Bind比Binding快多少。我能期望它快1.5倍、2倍、10倍等吗?由于这一切都是在XAML中发生的,我不知道如何衡量它。你能添加你引用的来源吗?@AxelMeier确切地说,答案来自citings。第一段来自本页的介绍,第二段来自本页的部分。我将添加示例来解释每一句话的含义。在我的特殊情况下,{Binding Data.Name,Mode=OneWay}不适用于更新(尽管数据和名称都实现了INotifyPropertyChanged),但{x:Bind Data.Name,Mode=OneWay}完成了更新。