gpt4 book ai didi

wpf - {Binding PropertyName} 和 {Binding Path=PropertyName} 之间的区别

转载 作者:行者123 更新时间:2023-12-03 11:43:59 32 4
gpt4 key购买 nike

我已经看到在同一个项目中使用了这两种样式,我想知道它们之间是否存在任何语义差异,或者是否会推荐任何一种风格以及为什么。

最佳答案

只要您有一个带有类型参数的复杂属性路径,您就会遇到一个显着的差异。

从概念上讲,它们是等效的,因为它们最终都设置了 Binding.Path ,一个通过parameterized Binding constructor ,另一个直接通过属性。内部发生的情况与 Binding.Path 非常不同。不仅仅是一个字符串,在这两种情况下都会传递给属性,它是一个 PropertyPath .

解析 XAML 时,type converters用于将字符串转换为属性所期望的类型。所以当你使用 Path=一个 PropertyPathConverter 将被实例化以解析字符串并返回 PropertyPath .现在这里有区别:

  • Binding(string path) 调用 public PropertyPath(string, Object[])
  • PropertyPathConverter 调用 internal PropertyPath(string, ITypeDescriptorContext)

  • (对于 Binding 构造函数, Object[] 将为空)

    这有什么关系?

    例如,如果您有 multiple indexers in a class例如一个期望 string和一个期望 int并且您尝试将值强制转换为目标,强制转换将不起作用:
    {Binding [(sys:Int32)0]}
    PropertyPath缺少 ITypeDescriptorContext因为调用了公共(public)构造函数,所以类型 System.Int32无法从字符串 sys:Int32 解析.

    如果您使用 Path=但是将使用类型转换器,并且将使用上下文解析类型,因此这将起作用:
    {Binding Path=[(sys:Int32)0]}

    (实现细节是不是很有趣?)

    关于wpf - {Binding PropertyName} 和 {Binding Path=PropertyName} 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306657/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com