【发布时间】:2012-03-08 19:45:38
【问题描述】:
我在 XAML 中使用了很多绑定,有时我在绑定中使用 path=,有时不使用。 在哪些情况下我需要 path= 以及何时可以省略它?
【问题讨论】:
我在 XAML 中使用了很多绑定,有时我在绑定中使用 path=,有时不使用。 在哪些情况下我需要 path= 以及何时可以省略它?
【问题讨论】:
它始终可以省略,因为它是 Binding XAML 扩展的默认属性。仅在使用多个属性时才明确指定。
【讨论】:
这是因为 Binding 类有一个默认构造函数,当您有 {Binding FallbackValue='HelloWorld', Path=MyProperty} 之类的绑定和具有单个参数 Path 的构造函数时使用该构造函数。
所以当有一个属性/值对列表时,绑定被创建为
new Binding(){
Path="MyProperty"
ElementName="MyElement"
}
第二种形式用于{Binding MyProperty, ...} 之类的绑定。在这种情况下,绑定被创建为
new Binding("MyProperty"){
ElementName = "MyElement",
...
}
指定 Path= 总是正确的(并且可能更正确),但没有它你也可以逃脱。
【讨论】:
Path 用于指定要绑定到的底层对象的属性名称。
绑定到DataContext时,可以省略Path:
{Binding MyProperty}
{Binding Path=MyProperty}
当您需要指定 DataContext 以外的源时,您可以使用 Source、RelativeSource 或 ElementName 来引用该对象,因此您通常必须指定要指定它的哪个属性设置绑定:
<Button Background="{Binding ElementName=refButton, Path=Background}"/>
<TextBlock Width="{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualWidth}"/>
【讨论】:
当您直接在 Binding 语句后面写入属性的路径时,您始终可以省略 Path=。
{Binding MyProperty}
与
相同{Binding Path=MyProperty}
当您将路径内联到属性时,您需要使用 Path= 指定它
{Binding FallbackValue='HelloWorld', Path=MyProperty}
【讨论】:
就像 Richard Szalay 所说,如果它是第一个属性,则它是可选的。但在我看来,如果您输入路径属性,则更容易阅读。代码突出显示效果也更好。
【讨论】: