任何人都可以解释为什么在设置绑定时,有时你会用绑定路径周围的引号来做 -
<myObject.myProperty>
<Binding Path="myData" />
<myObject.myProperty/>
有时没有 -
<myObject myProperty="{Binding Path=myData}" />
Microsoft(http://msdn.microsoft.com/en-us/library/ms752059.aspx#xaml_syntax_in_brief)州 -
"An attribute syntax names the property that is
being set in attribute syntax, followed by the
assignment operator (=). The value of an attribute
is always specified as a string that is contained
within quotation marks."
但是在这里我们总是指定没有引号的Binding元素的Path属性。我不理解{}语法吗?
答案 0 :(得分:2)
这不是数据绑定本身的功能。这同样适用于任何标记扩展。例如,您所描述的引号/无引号变体也可以使用StaticResource
标记扩展名找到,如此示例所示:
<StackPanel>
<StackPanel.Resources>
<SolidColorBrush x:Key="b" Color="Red" />
</StackPanel.Resources>
<TextBlock
Foreground="{StaticResource b}"
Text="Foo"/>
<TextBlock
Text="Foo">
<TextBlock.Foreground>
<StaticResource ResourceKey="b" />
</TextBlock.Foreground>
</TextBlock>
</StackPanel>
归结为:如果您使用XML元素实例化标记扩展(例如Binding
或StaticResource
),并且将属性设置为属性,则语法规则为XML需要引号。这超出了XAML的控制范围 - XML语法需要围绕所有属性值的引号。
但是如果使用标记语法扩展(即{...}),则对于在这些大括号内设置的属性,引号是可选的。那是因为标记扩展语法不是XML的一个特性。这是XAML的一个功能,因此Microsoft可以控制语法。标记扩展的一个目标是减少冗长,并且由于Microsoft可以将引号设置为可选,因此它们是这样做的。 (事实上,要求引用会很混乱,因为你倾向于进入转义问题 - 当标记扩展是属性的值时,它已经被引号括起来,因此要求嵌套引号可能会变得混乱。)
顺便说一下,还有第三种语法:
<myObject.myProperty>
<Binding>
<Binding.Path>myData</Binding.Path>
</Binding>
<myObject.myProperty/>
Binding
只是XAML中的其他任何对象,因此您可以使用属性或属性元素设置其属性。通过将Path
设置为属性元素,我可以将其值作为该属性元素的内容提供。 XML语法规则不需要围绕元素内容的引号,所以我再次省略引号。
所以这一切都归结为XML的数据需求报价规则。它与XAML没有多大关系,并且完全没有特定于数据绑定。