“Path”属性的简单WPF数据绑定语法

时间:2013-04-01 07:50:03

标签: wpf data-binding binding syntax path

任何人都可以解释为什么在设置绑定时,有时你会用绑定路径周围的引号来做 -

<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属性。我不理解{}语法吗?

1 个答案:

答案 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元素实例化标记扩展(例如BindingStaticResource),并且将属性设置为属性,则语法规则为XML需要引号。这超出了XAML的控制范围 - XML语法需要围绕所有属性值的引号。

但是如果使用标记语法扩展(即{...}),则对于在这些大括号内设置的属性,引号是可选的。那是因为标记扩展语法不是XML的一个特性。这是XAML的一个功能,因此Microsoft可以控制语法。标记扩展的一个目标是减少冗长,并且由于Microsoft可以将引号设置为可选,因此它们是这样做的。 (事实上​​,要求引用会很混乱,因为你倾向于进入转义问题 - 当标记扩展是属性的值时,它已经被引号括起来,因此要求嵌套引号可能会变得混乱。)

顺便说一下,还有第三种语法:

<myObject.myProperty>
    <Binding>
        <Binding.Path>myData</Binding.Path>
    </Binding>
<myObject.myProperty/>

Binding只是XAML中的其他任何对象,因此您可以使用属性或属性元素设置其属性。通过将Path设置为属性元素,我可以将其值作为该属性元素的内容提供。 XML语法规则不需要围绕元素内容的引号,所以我再次省略引号。

所以这一切都归结为XML的数据需求报价规则。它与XAML没有多大关系,并且完全没有特定于数据绑定。