我见过在同一个项目中使用这两种样式,我想知道它们之间是否有语义上的差异,或者是否会推荐使用另一种样式,以及为什么。
发布于 2010-11-30 02:25:08
没有。
如果未指定,则为Path属性赋值。换句话说,Path是绑定的默认属性。
它类似于"Content“属性,它是许多控件的默认属性。例如
<Button>Hello</Button>与<Button><Button.Content><TextBlock Text="Hello"/></Button>相同
希望这能有所帮助。
发布于 2012-02-22 02:26:33
这里有一个很大的区别,一旦你有了一个带有类型化参数的复杂属性路径,你就会遇到这个问题。
从概念上讲,它们是等效的,因为它们最终都是通过parameterized Binding constructor设置Binding.Path,另一个是直接通过属性设置。在内部发生的事情是非常不同的,因为Binding.Path不仅仅是一个字符串,在两种情况下都会传递给属性,它是一个PropertyPath。
在解析XAML时,type converters用于将字符串转换为属性所期望的类型。因此,当您使用Path=时,将实例化一个PropertyPathConverter来解析字符串并返回一个PropertyPath。下面是不同之处:
Binding(string path)调用public PropertyPath(string, Object[])PropertyPathConverter调用internal PropertyPath(string, ITypeDescriptorContext)(对于Binding构造函数,Object[]将为空)
这有什么关系呢?
例如,如果您有一个需要string的multiple indexers in a class和一个需要int的and,而您试图将值强制转换为针对后者,则强制转换将不起作用:
{Binding [(sys:Int32)0]}PropertyPath缺少ITypeDescriptorContext,因为调用了公共构造函数,因此无法从字符串sys:Int32解析类型System.Int32。
但是,如果您使用Path=,则将使用类型转换器,并且类型将使用上下文进行解析,因此这将起作用:
{Binding Path=[(sys:Int32)0]}(实现细节不是很有趣吗?)
发布于 2010-11-30 05:50:01
它们的意思是一样的。它们的不同之处在于绑定对象的实例化和填充方式。
{Binding Path=Foo}使用其无参数构造函数创建绑定实例,然后设置该实例的Path属性。
{Binding Foo}使用其单参数构造函数创建绑定实例,并将值"Foo“传递给该构造函数参数。单参数构造函数只设置Path属性,这就是为什么这两种语法是等价的。
它非常类似于自定义属性的语法,您还可以传递构造函数参数和/或设置属性值。
https://stackoverflow.com/questions/4306657
复制相似问题